セキュリティで保護されていないエンドポイントを自己ホスト型サービスに追加しようとしていたため、基本的に、セッションを使用するインターフェイスとセッションを使用しないインターフェイスが 1 つあります。どちらも同じクラスで実装されています。これが私のサーバー構成ファイルの一部です:
<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 操作は、PT.DataServices.WCFService.IPTDataServices.GetData 操作から既にエクスポートされているメッセージ要素 [http://tempuri.org/:GetData] を参照します。
動的に使用されているエンドポイントに応じて、すべてのクライアントが異なるメソッド名を使用するように変更したくありません... 2 つのインターフェイスのそれぞれに同じメソッドを使用しても問題ないことを WCF に伝えるにはどうすればよいですか?