0

我无法弄清楚如何让命名管道 WCF 服务正常工作。该服务与可执行文件位于单独的程序集中。

配置如下所示:

  <system.serviceModel>
    <bindings>
      <netNamedPipeBinding>
        <binding name="NoSecurityIPC">
          <security mode="None" />
        </binding>
      </netNamedPipeBinding>
    </bindings>
    <client>
      <endpoint name="internal"
        address="net.pipe://localhost/"
        binding="netNamedPipeBinding"
        bindingConfiguration="NoSecurityIPC"
        contract="TimeService.ITimeService" />
    </client>
    <services>
      <service name="TimeService">
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>            
        <endpoint name="internal"
          address="net.pipe://localhost/"
          binding="netNamedPipeBinding"
          bindingConfiguration="NoSecurityIPC"
          contract="TimeService.ITimeService" />
      </service>
    </services>
  </system.serviceModel>

我正在使用 ChannelFactory 创建代理来访问服务主机:

ServiceHost h = new ServiceHost(typeof(TimeService), new Uri("net.pipe://localhost/"));
h.AddServiceEndpoint(typeof(ITimeService), new NetNamedPipeBinding("NoSecurityIPC"), "");
h.Open();

ChannelFactory<ITimeService> factory = new ChannelFactory<ITimeService>("internal");

ICpTimeService proxy = factory.CreateChannel();

using (proxy as IDisposable)
{                
    this.ds = proxy.LoadData();
}

我不确定创建 ChannelFactory 时我做错了什么。它似乎在配置中找不到“channel1”。当我手动创建绑定并将其传递给 ChannelFactory 构造函数时,会创建工厂和代理,但对 LoadData() 的调用失败(超时)。

谁能看到我在这里做错了什么?

编辑:我在 app.config 上方进行了编辑,以确保两个端点具有完全相同的数据。这解决了我的 Channelfactory 问题。但是,如上所述对服务方法的调用仍然超时。

4

1 回答 1

0

我没有看到实际错误消息中的问题描述,因此很难猜测您的问题可能是什么。您是否有可能尝试在非管理员帐户下运行它?我目前在 Windows 7 上的非管理员用户帐户下使用 NetNamedPipeBinding 作为 IPC 形式获取 WCF 时遇到问题。也许您遇到了同样的问题?

于 2011-04-29T02:27:52.397 回答