Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF:没有端点侦听_C#_Wcf - Fatal编程技术网

C# WCF:没有端点侦听

C# WCF:没有端点侦听,c#,wcf,C#,Wcf,我用link学习WCF编程 我在该链接中使用了用于连接客户端和服务器的示例代码。现在我想将该控制台应用程序转换为WPF,但在运行客户机时(当然,在运行客户机之前运行服务器)会出现以下错误: 在网络上没有端点侦听。pipe://localhost/PipeReverse 这可以接受这个信息。这 通常由不正确的地址或SOAP操作引起 我还要说,示例代码没有任何app.config文件 在客户端的MainWindow.xaml文件中: [CallbackBehavior( ConcurrencyMod

我用link学习WCF编程

我在该链接中使用了用于连接客户端和服务器的示例代码。现在我想将该控制台应用程序转换为WPF,但在运行客户机时(当然,在运行客户机之前运行服务器)会出现以下错误:

在网络上没有端点侦听。pipe://localhost/PipeReverse 这可以接受这个信息。这 通常由不正确的地址或SOAP操作引起

我还要说,示例代码没有任何
app.config
文件

在客户端的
MainWindow.xaml
文件中:

[CallbackBehavior( ConcurrencyMode=ConcurrencyMode.Multiple,UseSynchronizationContext=false )]
public partial class MainWindow : Window,ICallbacks
{
    public void MyCallbackFunction(string callbackValue)
    {
        Dispatcher dispatcher=Dispatcher.CurrentDispatcher;
        dispatcher.BeginInvoke( new Action(
        () => textBox1.Text = callbackValue ) );
        //     MessageBox.Show( "Callback Received: {0}",callbackValue );
    }
    IStringReverser _channel;
    [ServiceContract( SessionMode = SessionMode.Required,
    CallbackContract = typeof( ICallbacks ) )]
    public interface IStringReverser
    {
        [OperationContract]
        string ReverseString(string value);
    }


    public MainWindow()
    {
        InitializeComponent();
        MainWindow myCallbacks = this;
        var pipeFactory = new DuplexChannelFactory<IStringReverser>(
           myCallbacks,
           new NetNamedPipeBinding(),
           new EndpointAddress(
              "net.pipe://localhost/PipeReverse" ) );
        ThreadPool.QueueUserWorkItem( new WaitCallback(
            (obj) =>
            {
                _channel = pipeFactory.CreateChannel();
            } ) );
    }

    private void button1_Click(object sender,RoutedEventArgs e)
    {
      _channel.ReverseString( "Hello World" );
    }
}
public interface ICallbacks
{
    [OperationContract( IsOneWay = true )]
    void MyCallbackFunction(string callbackValue);
}

这个问题很容易解决


所有的问题是,我错误地关闭连接后,点击按钮在服务器上

您的服务器和客户端是否在同一台机器上运行?
NetNamedPipe
绑定只能在同一台机器上工作..阿拉什,您是否要为服务编写两次接口?IStringReverser只应在单独的dll中写入一次,以便服务器和客户端都可以共享确切的接口。完全限定的名称空间可能会有所不同,不仅仅是接口的名称。是的,它们在同一台机器上,我也用NetTcpBinding进行了测试,但不是success@Despertar:您能给我解释一下吗?您以前是否能够在没有所有双工的情况下连接到服务?如果不是,你想从一个简单的例子开始,这样你就知道你可以连接。然后返回并在上面添加双工和回调。其次,如果您使用TCP托管,则通过键入cmd.exe
netstat-ano | findstr 1234
来验证它是否正在侦听,其中1234是您托管的端口。这是您要验证的第一件事,即在您尝试连接到服务器之前,服务器甚至正在侦听连接。太棒了,到目前为止,我已经执行了您的代码三次,并且在我这边运行良好。然而,我无法理解您在客户端的MyCallbackFunction实现。为什么需要使用Dispatcher和BeginInvoke?请阅读此链接:
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }


    private void button1_Click(object sender,RoutedEventArgs e)
    {
        using (ServiceHost host = new ServiceHost(
       typeof( StringReverser ),
        new Uri[]{
      new Uri("net.pipe://localhost")
        } ))
        {
            host.AddServiceEndpoint( typeof( IStringReverser ),
              new NetNamedPipeBinding(),
              "PipeReverse" );

            host.Open();

            MessageBox.Show( Properties.Resources.Service_is_available__Press__ENTER__to_exit_ );
            host.Close();
        }
    }
}

[ServiceContract(SessionMode = SessionMode.Required,
                 CallbackContract = typeof( ICallbacks ) )]
public interface IStringReverser
{
    [OperationContract]
    string ReverseString(string value);
}

public interface ICallbacks
{
    [OperationContract( IsOneWay = true )]
    void MyCallbackFunction(string callbackValue);
}

public class StringReverser : IStringReverser
{
    public string ReverseString(string value)
    {
        char[] retVal = value.ToCharArray();
        int idx = 0;
        for (int i = value.Length - 1;i >= 0;i--)
            retVal[idx++] = value[i];

        ICallbacks callbacks =
     OperationContext.Current.GetCallbackChannel<ICallbacks>();

        callbacks.MyCallbackFunction( new string( retVal ) );

        return new string( retVal );
    }
}