当我为mex配置元数据时,为什么我的本地WCF服务没有解析元数据?

时间:2011-05-05 14:17:47

标签: wcf iis

为什么我的WCF服务本地不提供元数据,我认为我的设置与测试环境完全相同?

环境

我的开发机器有Windows Server 2003,SP2和IIS。我在本地构建了我的服务,然后将CSPROJ的目录设置为Web站点。

IIS配置

Web Site    Description MyService
    IP Address  (All Unassigned)
    TCP port    5001
    Enable HTTP Keep-Alives true
HomeDirectory   Directory located on this computer  
    Local Path  Project directory with .svc and Web.config
    Application Name    Default Application
    Execute Permissions Scripts and Executables
    Application Pool    Default
ASP.NET Version 2.0.50727
    Virtual Path    MyService
    File location   Path of Web.config

我在我可以从中获取代理信息的UAT实例上建模我的IIS设置。 但是,当我尝试使用

获取我的实例上的代理信息时
C:\Program Files\Microsoft Visual Studio 10.0\VC>svcutil http://localhost:5001/P
mdgService.svc

我收到以下错误消息。

  

错误:无法从中获取元数据   http://localhost:5001/MyService.svc   ...

     

元数据包含无法解析的引用:   'http://localhost:5001/MyService.svc'。

     

http://localhost:5001/MyService.svc没有收听端点   ...       远程服务器返回错误:(404)Not Found。   ...

我无法浏览到该网址。

我已经尝试过建议

  1. 已验证使用了元数据行为。 (它与工作实例相同。)
  2. 允许对C:\ Windows \ temp进行完全控制访问IWAM_,IUSER_,ASPNET(此处建议:WCF Metadata reference cannot be resolved)没有帮助。
  3. 以下是我的Web.config

    <configuration>
    <!-...-->
    <system.serviceModel>
        <services>
          <service behaviorConfiguration="MyService.Service1Behavior" name="MyService.MyService">
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
      contract="MyService.MyService">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <bindings>
          <basicHttpBinding>
            <binding name="MyBasicHttpBinding" maxBufferPoolSize="2147483647"  maxReceivedMessageSize="2147483647"
                maxBufferSize="2147483647">
            <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647"
                maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyService.Service1Behavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

2 个答案:

答案 0 :(得分:1)

我怀疑这个问题是因为缺少基地址。 基本地址应该由iis分配(如果不是手动放置在配置中),或者您的可视工作室(如果您处于开发阶段),或者您自己的主机,您应该自己提供基址。

根据您的主机方法,将解析基地址。

如果您使用IIS来托管它,那么您托管的路径应该会给您一些线索。

从您的陈述中,我可以理解您正在尝试使用与其他工作服务类似的配置。在这种情况下,您的端口号可能不相同(http:// localhost:5000)。

尝试创建.svc文件并使用visual studio的选项“在浏览器中查看”。这可以让您了解所分配的端口号。

答案 1 :(得分:0)

问题在于权限。

  

当前标识(NT AUTHORITY \ NETWORK SERVICE)没有对“c:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files”的写入权限。

一旦我将这些权限授予了计算机上的NETWORK SERVICE,我就能够在Silverlight客户端中创建代理并配置该服务。

我要感谢razlebe指出我正确的方向。