我在我的客户端机器上运行了一个 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 中的自托管 WebService 代码:
<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>