Я пытался добавить незащищенную конечную точку в свою самостоятельную службу, поэтому в основном у меня есть один интерфейс, который использует сеансы, а другой - нет. Они оба реализованы одним и тем же классом. Вот часть файла конфигурации моего сервера:
<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, что можно использовать одни и те же методы на каждом из двух интерфейсов?