WCF-Can';是否为IIS下的NetMsmq绑定生成元数据/实现MEX?

WCF-Can';是否为IIS下的NetMsmq绑定生成元数据/实现MEX?,wcf,Wcf,我已经成功地在WAS下实现了NetTcp绑定和元数据,但我在WAS/IIS下遇到了netMsmqBinding问题。简而言之,我可以为自托管NetMsmq绑定应用程序实现MEX,但不能实现WAS/IIS。似乎WAS拒绝了我使用的任何地址,而我可以使用自托管应用程序中的任何地址。换句话说,我可以在自托管中执行此操作: <system.serviceModel> <services> <service name="Microsoft.Samples.

我已经成功地在WAS下实现了NetTcp绑定和元数据,但我在WAS/IIS下遇到了netMsmqBinding问题。简而言之,我可以为自托管NetMsmq绑定应用程序实现MEX,但不能实现WAS/IIS。似乎WAS拒绝了我使用的任何地址,而我可以使用自托管应用程序中的任何地址。换句话说,我可以在自托管中执行此操作:

<system.serviceModel>
    <services>
      <service name="Microsoft.Samples.MSMQTransactedSample.OrderProcessorService" behaviorConfiguration="OrderProcessorServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
          </baseAddresses>
        </host>
        <!-- Define NetMsmqEndpoint -->
        <endpoint address="net.msmq://localhost/private/ServiceModelSamplesTransacted" binding="netMsmqBinding" bindingConfiguration="TransactedBinding" contract="Microsoft.Samples.MSMQTransactedSample.IOrderProcessor" />
        <!-- the mex endpoint is exposed at http://localhost:8000/ServiceModelSamples/service/mex -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="OrderProcessorServiceBehavior">
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netMsmqBinding>
        <binding name="TransactedBinding">
          <security mode="None" />
        </binding>
      </netMsmqBinding>
    </bindings>
  </system.serviceModel>

Hoever,当我在WAS中尝试类似的东西时,它说地址8000处没有端点。它不会承载metdata。是否有人可以帮助我在WAS中获取元数据或实现NetMsmq的MEX:

<system.serviceModel>
    <bindings>
      <netMsmqBinding>
        <binding name="MsmqBindingNonTransactionalNoSecurity" exactlyOnce="false">
          <security mode="None"/>
        </binding>
      </netMsmqBinding>
    </bindings>
  <services>  
      <service name="Portal.LoadSim.Services.MsmqService" behaviorConfiguration="PortalServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/PortalLoadSimServices10/MsmqService"/>
          </baseAddresses>
        </host>
        <!-- Define NetMsmqEndpoint -->
        <endpoint address="net.msmq://localhost/private/PortalLoadSimServices10/MsmqService.svc" binding="netMsmqBinding" bindingConfiguration="MsmqBindingNonTransactionalNoSecurity" contract="Portal.LoadSim.Shared.IMsmqService" />
        <!-- the mex endpoint is exposed at http://localhost:8000/PortalLoadSimServices10/MsmqService/mex -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

      </service>

    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="PortalServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

您需要为您的服务添加URL访问控制。此命令应适用于您:

netsh http add urlacl url=http://localhost:8000/PortalLoadSimServices10/MsmqService user="NT AUTHORITY\NetworkService" listen=yes
删除条目的步骤

delete urlacl url=http://localhost:8000/PortalLoadSimServices10/MsmqService


更新:这不是解决您问题的方法。如果您希望以自托管应用程序的形式运行服务,并在非标准帐户下运行服务,您会这样做。对不起,我把它搞混了。我试着在家里的一个示例应用程序上使用您的配置,发现我必须做两件事才能使其正常工作—第一,我必须将队列重命名为svc文件的路径和名称(例如PortalLoadSimServices10/MsmqService.svc),而不是使用基地址,只需浏览到IIS主机应用程序中的svc文件即可。您可能还需要修改队列权限,以便iis能够正确访问它。让我知道这是否解决了您的问题。

相同的错误-下载“连接到远程服务器”时出错无法建立连接,因为目标计算机主动拒绝127.0.0.1:8000。没有可以接受消息的端点正在侦听。这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。我尝试添加服务引用以删除urlacl条目,并尝试将完整地址添加到元数据中,包括mex(我在文章中输入的命令中没有该地址)。