0

我试图让 IIS6 与我在同一台机器上的单独 Windows 服务应用程序中托管的 WCF 服务可靠地工作。用户通过一些 HTTP 暴露的服务连接到 IIS,这工作正常,然后 IIS 需要从 Windows 服务获取一些信息以放入 HTTP 响应。我还需要 Windows 服务和 IIS 之间的回调通道。

经过大量的努力,我让它与 netTcpBinding 一起工作,一切都会在 5 或 10 分钟内恢复正常,但之后 IIS 会报告 WCF 通道出现故障,然后停止处理任何请求,直到工作进程被回收和整个事情重复了。

我一直在尝试交换到 netNamedPipeBinding,但 IIS 拒绝或被拒绝访问管道,并出现“net.pipe://localhost/mypipename 没有端点监听”错误。我可以从控制台应用程序很好地连接到管道。

所以我的问题是,是否有人将这两个绑定中的任何一个与 IIS 作为客户端一起使用,或者有任何其他方法?

4

3 回答 3

2

我们使用 IIS 7 通过 net.tcp 和 net.pipe 绑定托管大约 20 个服务,并且工作正常。

对我来说,您的管道问题看起来像是配置错误。如果有帮助,这就是我们配置它们的方式:

服务器:

 <endpoint address ="" binding="fooBinding" 
           contract="Bla.IBlaAPI" 
           bindingConfiguration="BlaAPI.BindingConfig">

绑定配置:

<binding name="BlaAPI.BindingConfig"
                 receiveTimeout = "10:50:00"
                 sendTimeout = "10:50:00"
                 maxReceivedMessageSize="2147483647"
                 maxBufferSize="2147483647"
                 maxBufferPoolSize="2147483647"
                 transactionFlow="false">
          <readerQuotas maxDepth="32"
                       maxStringContentLength="2147483647"
                       maxArrayLength="2147483647"
                       maxBytesPerRead="8192"
                       maxNameTableCharCount="2147483647" />
          <security mode="None"/>
</binding>

请注意,我们正在使用长超时并且对消息大小等具有非常高的配额,因为我们正在通过该服务传递一些大数据块。您可以根据自己的需要进行调整。我们将安全设置为“无”,因为仅从受保护的本地计算机联系服务。同样,您的里程可能会有所不同。

客户:

<endpoint name="Bla.Bindings.BlaAPI" address="net.pipe://localhost/bla/IBlaAPI.svc"
                behaviorConfiguration="BlaAPI.ServiceBehavior"
                binding="netNamedPipeBinding" bindingConfiguration="BlaAPI.BindingConfig"
                contract="Bla.IBlaAPI" />

关于Faulted状态问题,请注意,如果在服务代码执行过程中出现未处理的异常,服务实例会一直处于Faulted状态,直到它被正常关闭。为避免这种情况,要么在服务顶层处理异常,要么使用例如企业库异常处理块。

于 2009-11-10T12:28:18.947 回答
1

重新 NetNamedPipeBinding 和“net.pipe://localhost/mypipename 没有端点监听”

您的 Web 应用程序是否在模拟其用户?如果您尝试在登录令牌具有 NETWORK USERS 成员身份的安全上下文中通过命名管道绑定访问 WCF 服务,则会出现上述错误。当 WCF 客户端通道堆栈尝试读取由服务创建的共享内存对象以发布正在使用的管道的名称时,它不区分拒绝访问错误和“未找到”错误。(见http://blogs.charteris.com/blogs/chrisdi/archive/2008/05.aspx等)

IIS 应用程序中的模拟令牌将始终具有 NETWORK USERS 成员身份。

于 2010-11-15T17:01:52.853 回答
0

你能告诉我你用来处理 wcf 客户端代理的代码吗?

永远不要在 wcf 代理上使用“使用”,因为它不会每次都正确处理。这可能会导致故障状态。

于 2009-11-10T12:26:58.287 回答