3

IISのないサーバーでホストされ、認証なしで一般にアクセスできるtcpwcfサービスを作成しようとしています。

これが私がすることです:

ServiceHost svh = new ServiceHost(typeof(MyService));

var tcpbinding = new NetTcpBinding(SecurityMode.None);

var location = "net.tcp://localhost:11111";
svh.AddServiceEndpoint(typeof(IMyService), tcpbinding, location);

svh.Open();
....

このサービスはlocashostで正常に動作しますが、サーバーにセットアップすると(ファイアウォールの例外が追加されます)、クライアントがクラッシュして次のメッセージが表示されます。

The socket connection was aborted. This could be caused by an error processing 
your message or a receive timeout being exceeded by the remote host, or an 
underlying network resource issue. Local socket timeout was '00:00:59.7344663'.

クライアント構成ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IMyService">
                    <security mode="None" />
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://myserver:11111/"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IMyService"
                contract="MyServer.IMyService" name="NetTcpBinding_IMyService" />
        </client>
    </system.serviceModel>
</configuration>

これを機能させるには何を変更する必要がありますか?

4

1 に答える 1

1

過去にも同様の問題がありlocalhost、エンドポイントアドレス(ServiceHost.ctor)ではなく、実際のマシン名を使用して解決しました。また、以下に示すように、サービスホスト自体でアドレスを定義できます。

ServiceHost svh = new ServiceHost(typeof(MyService), new Uri("net.tcp://myserver:11111"));
var tcpbinding = new NetTcpBinding(SecurityMode.None);
svh.AddServiceEndpoint(typeof(IMyService), tcpbinding, "");
svh.Open();
于 2012-11-19T05:05:35.287 に答える