开发者

class implemeting service contracts base class for another class WCF

开发者 https://www.devze.com 2023-04-03 17:26 出处:网络
I have a class implementing a service contract. Another class being derived from this class and in turn implements another service contract

I have a class implementing a service contract. Another class being derived from this class and in turn implements another service contract

Class A: a.IA
{

}

Class B: A, b.IB
{

}

How do I expose the endpoints fo开发者_运维技巧r contract IB?

The endpoints I tried:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.A1" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.B1" />
</service>

If I do this, it gives error

Service 'B' implements multiple ServiceContract types, and no endpoints are defined in the configuration file. WebServiceHost can set up default endpoints, but only if the service implements only a single ServiceContract. Either change the service to only implement a single ServiceContract, or else define endpoints for the service explicitly in the configuration file.

Thanks in advance.

EDIT

the config had a typo above.

    <service name="B">
       <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
       <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
    </service>

The template I am using for this is WCF Rest template 4.0 (if it makes any difference)


The service class that implements the service is B - and you use that correctly, as far as I can tell.

The contract that this service class implements is IB - but that doesn't really show up in your config.

Try this:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>

The contract in the endpoint must denote a service interface (typically) that defines the services method - that interface must have the [ServiceContract] attribute applied to it.

OK - so that was a typo and your contracts are correct - but my question is then: are the a. and b. prefixes on the contracts the namespaces those contracts live in?

And if yes: why isn't the service tag using that namespace, too?? Does it make any difference if you change it to name="b.B" :

<service name="b.B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>
0

精彩评论

暂无评论...
验证码 换一张
取 消