为什么';当我为mex配置了本地WCF服务后,它是否会解析元数据?

为什么';当我为mex配置了本地WCF服务后,它是否会解析元数据?,wcf,iis,Wcf,Iis,为什么我的WCF服务不在本地提供元数据,而我认为我已经完全按照测试环境中的设置了元数据 环境 我的开发机器有Windows Server 2003、SP2和IIS。我在本地构建了我的服务,然后将CSPROJ的目录设置为一个网站 IIS配置 Web Site Description MyService IP Address (All Unassigned) TCP port 5001 Enable HTTP Keep-Alives true HomeDirec

为什么我的WCF服务不在本地提供元数据,而我认为我已经完全按照测试环境中的设置了元数据

环境

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

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 我收到以下错误消息

错误:无法从中获取元数据

元数据包含无法解析的引用: ''

没有端点在侦听 ... 远程服务器返回错误:(404)未找到。

我无法浏览到URL。

我试过一些建议

  • 已验证是否使用了元数据行为。(它与工作实例相同。)
  • 允许对C:\Windows\temp进行完全控制访问到IWAM、IUSER、ASPNET(此处建议:)没有帮助 下面是我的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>
    

    我怀疑问题是因为缺少基址。 基址应该由iis分配(如果没有手动放置在配置中),或者由visual studio分配(如果您处于开发阶段),或者由您自己的主机分配(您希望自己在其中提供基址)

    根据主机方法,将解析基址

    如果您正在使用IIS托管它,那么您托管的路径应该会为您提供线索

    从您的声明中,我可以理解您正试图将类似的配置用作另一个工作服务。在这种情况下,您的端口号可能不相同(http://localhost:5000)


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

    我怀疑问题是因为缺少基址。 基址应该由iis分配(如果没有手动放置在配置中),或者由visual studio分配(如果您处于开发阶段),或者由您自己的主机分配(您希望自己在其中提供基址)

    根据主机方法,将解析基址

    如果您正在使用IIS托管它,那么您托管的路径应该会为您提供线索

    从您的声明中,我可以理解您正试图将类似的配置用作另一个工作服务。在这种情况下,您的端口号可能不相同(http://localhost:5000)


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

    问题在于权限

    当前标识(NT授权\网络服务)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限

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


    我要感谢razlebe为我指明了正确的方向。

    问题在于权限

    当前标识(NT授权\网络服务)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限

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


    我要感谢razlebe为我指明了正确的方向。

    Windows事件查看器是否包含来自WCF的任何事件?您是否从以下URL或mdgService.svc/mexYes获取元数据。似乎有一些权限错误:“异常类型:HttpException异常消息:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限。请求信息:请求URL:请求路径:/MyService.svc/mex用户主机地址:127.0.0.1…”我现在得到了更好的信息:异常详细信息:System.Web.HttpException:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限。“>似乎在c:\WINDOWS\temp中设置权限会导致一条关于临时ASP.NET文件目录中权限的有用错误消息:-| WINDOWS事件查看器是否包含来自WCF的任何事件?是否从这些文件中获取元数据URL:或mdgService.svc/mexYes。似乎有一些权限错误:“异常类型:HttpException异常消息:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限。请求信息:请求URL:请求路径:/MyService.svc/mex用户主机地址:127.0.0.1…”我现在得到了更好的信息:异常详细信息:System.Web.HttpException:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\临时ASP.NET文件”的写入权限。“>似乎在c:\WINDOWS\temp中设置权限会导致有关临时ASP.NET文件目录中权限的有用错误消息:-测试服务器未使用标记。根据MSDN,在IIS()中托管时忽略此标记。“在浏览器中查看”提示帮助我找到问题(这与我的一个dll引用中的断开路径有关)。测试服务器不使用此标记。根据MSDN,在IIS()中托管时忽略此标记。“在浏览器中查看”提示帮助我找到问题(这与我的一个dll引用中的断开路径有关)。
    <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>