使用公共公共方法发布2个接口端点 - 操作引用已导出的消息元素....

时间:2012-08-16 16:21:52

标签: c# wcf app-config endpoints wcf-endpoint

一直在尝试将非安全端点添加到我的自托管服务,所以基本上我有一个使用会话的接口和另一个不使用会话的接口。它们都是由同一个类实现的。这是我的服务器配置文件的一部分:

<service name="PT.DataServices.WCFService.PTDataServices" behaviorConfiguration="dataServiceBehavior">
    <endpoint address="PTDataServices" binding="wsHttpBinding" contract="PT.DataServices.WCFService.IPTDataServices" bindingConfiguration="wsHttpBinding1">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>

    <endpoint address="PTDataServicesNoSessions" binding="wsHttpBinding" contract="PT.DataServices.WCFService.IPTDataServicesNoSessions" bindingConfiguration="wsHttpBinding2">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>


    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

    <host>
      <baseAddresses>
        <add baseAddress="http://*/PT6/DataServices/"/>
      </baseAddresses>
    </host>
  </service>

没有会话的界面:

[ServiceContract(
    SessionMode = SessionMode.NotAllowed
)]
public interface IPTDataServicesNoSessions
{
    [OperationContract]
    string GetData(int value);

}

与会话的接口:

[ServiceContract(
    SessionMode=SessionMode.Required
)]
public interface IPTDataServices
{
    [OperationContract(IsInitiating = true, IsTerminating = false)]
    DcUser InitSession(string userCode, string passwordEncrypted, string connectionString);

    [OperationContract(IsInitiating = false, IsTerminating = true)]
    int EndSession();

    [OperationContract(IsInitiating = false, IsTerminating = false)]
    string GetData(int value);
}

放置:http:// localhost / PT6 / DataServices /在浏览器中返回:

  

PT.DataServices.WCFService.IPTDataServicesNoSessions.GetData   操作引用了一个消息元素[http://tempuri.org/:GetData]   已经从中出口了   PT.DataServices.WCFService.IPTDataServices.GetData操作。

我不想更改所有客户端以使用不同的方法名称,具体取决于动态使用的端点...如何告诉WCF在2个接口的每个接口上都可以使用相同的方法? / p>

1 个答案:

答案 0 :(得分:1)

自己想出来。我需要将namespace属性添加到我的接口:

[ServiceContract(
    SessionMode=SessionMode.Required,
    Namespace = "PTDataServices/WithSession"
)]

[ServiceContract(
    SessionMode = SessionMode.NotAllowed,
    Namespace = "PTDataServices/NoSessions"
)]

这允许WCF避免在WSDL中针对两个接口中具有相同名称的方法发生方法名称冲突。