1

NetNamedPipeBinding サービスをホストする単純な Windows フォーム アプリを開発しました。同じアプリは、サービス内の関数を呼び出そうとするクライアントですが、次のエラーが発生しました。

net.pipe://service1/ に送信されたこの要求操作は、構成されたタイムアウト (00:01:00) 内に応答を受信しませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理中であるか、サービスが応答メッセージを送信できなかったことが原因である可能性があります。(チャネル/プロキシを IContextChannel にキャストし、OperationTimeout プロパティを設定することによって) 操作のタイムアウトを増やすことを検討し、サービスがクライアントに接続できることを確認してください。

これは私のサービスです:

namespace WcfServiceExample
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string SayHello();
    }

    public class Service1 : IService1
    {
        public string SayHello()
        {
            return "Hello from " + Dns.GetHostName() + " !!";
        }
    }
}

これは私の app.config です (私の Windows フォーム アプリ内):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>      
      <!-- CLIENT & SERVER BINDINGS -->
      <bindings>
            <netNamedPipeBinding>
                <binding name="NamedPipeBinding">
                    <security mode="None" />
                </binding>
            </netNamedPipeBinding>
        </bindings>

        <!-- SERVER -->
        <services>
          <service name="WcfServiceExample.Service1" behaviorConfiguration="svc1behavior">
            <endpoint address="net.pipe://service1" binding="netNamedPipeBinding" bindingConfiguration="NamedPipeBinding" name="NamedPipedEndPoint" contract="WcfServiceExample.IService1" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="svc1behavior">
              <serviceMetadata  />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>

        <!-- CLIENT -->
        <client>
          <endpoint address="net.pipe://service1" binding="netNamedPipeBinding" 
              bindingConfiguration="NamedPipeBinding" contract="WcfServiceExample.IService1"
              name="NamedPipedClientEndPoint" />
        </client>

    </system.serviceModel>
</configuration>

これが私の Windows フォーム アプリです。

namespace ServiceHostAndClientNamedPipesNoProxy
{
    public partial class Form1 : Form
    {
        ServiceHost vHost;
        IService1 sc;

        public Form1()
        {
            InitializeComponent();

            StartHostService();
            StartClient();
        }

        private void StartHostService()
        {
            try
            {
                // Create the service instance
                vHost = new ServiceHost(typeof(Service1));
                // Open the service
                vHost.Open();                
            }
            catch (Exception ex)
            {
                vHost.Abort();
            }
        }

        private void StartClient()
        {
            NetNamedPipeBinding binding = new NetNamedPipeBinding("NamedPipeBinding");
            ChannelFactory<IService1> cf = new ChannelFactory<IService1>("NamedPipedClientEndPoint");
            sc = cf.CreateChannel();
            //((IContextChannel)sc).OperationTimeout = new TimeSpan(0, 3, 0);

            textBox1.Text = "Connected to " + cf.Endpoint.Address.ToString();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            vHost.Close();
        }

        private void btnInvokeMethod_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            textBox2.Text = textBox2.Text + System.Environment.NewLine + sc.SayHello();
            this.Cursor = Cursors.Default;
        }
    }
}

助けてください、私はこれで立ち往生しています!!!.

前もって。

4

0 に答える 0