为什么我的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。 ...
我无法浏览到该网址。
我已经尝试过建议
以下是我的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>
答案 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指出我正确的方向。