クライアントマシンで実行されているNetTcpセルフホスティングサービスがあり、サーバー上のIISで実行されている別のNetTcpサービスがあります。IISのサービスからセルフホストサービスを利用しようとしています。タイムアウトエラーで例外をスローしています。
WCFテストクライアントを使用してセルフホストサービスをテストしましたが、正常に動作します。また、セルフホストサービスを呼び出すサンプルC#アプリケーションを作成しましたが、これも正常に機能します。IIS上のサービスが呼び出しを試みた場合にのみ、これは失敗します。
私の推測では、IISにセキュリティ設定があり、通話の発信を妨げているため、タイムアウトになっているはずです。どんな手掛かり?
セルフホスティングサービスを呼び出すためのコード:
private object CallClient(string message)
{
var myBinding = new NetTcpBinding(SecurityMode.None);
var myEndpoint = new EndpointAddress("net.tcp://<myIP>:8188/MessageReceiverService/");
var myChannelFactory = new ChannelFactory<IMessageReceiverService>(myBinding, myEndpoint);
IMessageReceiverService client = null;
var result = new MessageCenterResponse { Result = message };
try
{
client = myChannelFactory.CreateChannel();
result.Result += client.TestMethod("Shankar");
}
catch (Exception ex)
{
if (client != null)
{
((ICommunicationObject)client).Abort();
}
result.Result += "Exception!!" + myEndpoint.Uri + " - " + ex.Message;
}
finally
{
((ICommunicationObject)client).Close();
}
return result;
}
メッセージレシーバーサービス(セルフホストサービス上):
public bool TestMethod(string testMessage)
{
return testMessage.Equals("Shankar");
}
上記のコードは、独立したアプリケーションから呼び出された場合は正常に機能しますが、次の行の後にIISから呼び出された場合は失敗します。client.TestMethod("Shankar");
これが私がセルフホストサービスを開始する方法です:
private void StartMessageCenterService()
{
var tcpUrl = new Uri("net.tcp://<myIP>:8188/MessageReceiverService/");
var messageCenterHost = new ServiceHost(typeof(MessageReceiverService), tcpUrl);
messageCenterHost.Faulted += MessageCenterHost_Faulted;
messageCenterHost.Open();
}
App.configのセルフホストWebサービスコード:
<services>
<service name="MessageCenter.Proxy.VirtualServer.MessageReceiverService" behaviorConfiguration="DebugServiceBehavior">
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="InsecureTcp"
behaviorConfiguration="LargeDataEndpointBehavior"
contract="MessageCenter.Common.Interfaces.IMessageReceiverService">
</endpoint>
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>