1

次のコードがあります。

クライアント側:

public bool Connect(string IPAdress, string Port, string UniqueName)
{
        try
        {
            EndpointAddress address = new EndpointAddress(new Uri("net.tcp://"+IPAdress+":"+Port+"/"+UniqueName));

            NetTcpBinding binding = new NetTcpBinding();
            binding.Security.Mode = SecurityMode.None;
            binding.TransferMode = TransferMode.Streamed;
            binding.MaxReceivedMessageSize = 1024 * 1024 * 64;
            m_Factory = new DuplexChannelFactory<IServerService>(this, binding, address);

            m_Service = m_Factory.CreateChannel();
            return true;
        }
        catch (Exception ex)
        {
            //log error
            return false;
        }
}

サーバ側

 public void Start(string Port, string UniqueName) {
        Uri baseAddress = new Uri("net.tcp://127.0.0.1:" + Port + "/" + UniqueName);
        NetTcpBinding binding = new NetTcpBinding();
        binding.Security.Mode = System.ServiceModel.SecurityMode.None;
        binding.MaxReceivedMessageSize = 1024 * 1024 * 64;
        binding.TransferMode = System.ServiceModel.TransferMode.Streamed;
        try
        {
            m_ServiceHost = new System.ServiceModel.ServiceHost(this, baseAddress);

            m_ServiceHost.AddServiceEndpoint(typeof(IServerService), binding, baseAddress);
            m_ServiceHost.Open();
        }
        catch (Exception ex)
        {

        }
    }

バッファリングされたバインディングを作成しようとしましたが、FileStream を送信しようとすると、ストリーミング転送モードを使用する必要があることを読んだため、サーバー側でインスタンスが空になりました。

クライアント側の行で次の例外が発生します

m_Service = m_Factory.CreateChannel();

コントラクトには Duplex が必要ですが、Binding 'NetTcpBinding' は Duplex をサポートしていないか、サポートするように正しく構成されていません。

4

0 に答える 0