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

C# 使用公共方法发布2个接口终结点-操作引用已导出的消息元素,c#,wcf,app-config,endpoints,wcf-endpoint,C#,Wcf,App Config,Endpoints,Wcf Endpoint,我一直在尝试向我的自托管服务添加一个不安全的端点,所以基本上我有一个使用会话的接口,另一个不使用会话。它们都是由同一个类实现的。以下是我的服务器配置文件的一部分: <service name="PT.DataServices.WCFService.PTDataServices" behaviorConfiguration="dataServiceBehavior"> <endpoint address="PTDataServices" binding="wsHttpBi

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

<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.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在两个接口上都使用相同的方法是可以的呢?

我自己解决了这个问题。我需要将namespace属性添加到我的接口:

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


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

您重新构建了服务吗?是否可以(正在运行)从中获取元数据信息?@tsells我现在可以在浏览器中键入更多信息。所以请看我编辑的问题。
[ServiceContract(
    SessionMode=SessionMode.Required,
    Namespace = "PTDataServices/WithSession"
)]
[ServiceContract(
    SessionMode = SessionMode.NotAllowed,
    Namespace = "PTDataServices/NoSessions"
)]