一直在尝试将非安全端点添加到我的自托管服务,所以基本上我有一个使用会话的接口和另一个不使用会话的接口。它们都是由同一个类实现的。这是我的服务器配置文件的一部分:
<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>
答案 0 :(得分:1)
自己想出来。我需要将namespace属性添加到我的接口:
[ServiceContract(
SessionMode=SessionMode.Required,
Namespace = "PTDataServices/WithSession"
)]
和
[ServiceContract(
SessionMode = SessionMode.NotAllowed,
Namespace = "PTDataServices/NoSessions"
)]
这允许WCF避免在WSDL中针对两个接口中具有相同名称的方法发生方法名称冲突。