C# 从运行在IIS 7上的另一个Net.Tcp WCF服务调用自托管WCF服务

C# 从运行在IIS 7上的另一个Net.Tcp WCF服务调用自托管WCF服务,c#,wpf,wcf,iis-7,self-hosting,C#,Wpf,Wcf,Iis 7,Self Hosting,我的客户机上运行着一个NetTcp自托管服务,服务器上的IIS上运行着另一个NetTcp服务。我正在尝试使用IIS中的自托管服务。它正在引发带有超时错误的异常 我使用WCF测试客户端来测试自托管服务,它运行良好。此外,我还编写了一个示例C#应用程序,该应用程序调用自托管服务,并且运行良好。只有当IIS上的服务尝试调用时,这才是失败的 我猜IIS上一定有某种安全设置,它会阻止传出呼叫,从而导致超时。有线索吗 调用自托管服务的代码: private object CallClient(string

我的客户机上运行着一个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");
    }
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();
    }
<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>
上述代码在从独立应用程序调用时工作正常,但在以下行之后从IIS调用时失败:
client.TestMethod(“Shankar”)

这是我启动自托管服务的方式:

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");
    }
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();
    }
<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>
private void startMessageCenter服务()
{
var tcpUrl=新Uri(“net.tcp://:8188/MessageReceiverService/”;
var messageCenterHost=新服务主机(typeof(MessageReceiverService),tcpUrl);
messageCenterHost.Faulted+=messageCenterHost\u Faulted;
messageCenterHost.Open();
}
App.config:

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");
    }
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();
    }
<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>


您能从IIS盒使用WCF测试客户端连接到您的自托管服务吗?并不是说它能修复安全错误,而是对于相同的盒名,管道是一种更有效的传输方式。@Blam,我正在本地机器上测试,但最终服务将在服务器盒上运行,和不同机器上的客户机代码。@500-内部服务器错误,我目前正在本地机器上运行这两个程序来测试。自托管服务正在端口8188上运行。请检查IIS设置和防火墙。