1

クライアントマシンで実行されている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>
4

0 に答える 0