我使用C#和Visual Studio 2008编写了一个WCF Web服务。
当我使用内置的开发Web服务器运行它时,我可以通过浏览到服务契约的[WebGet(UriTemplate =“..”)]属性中指定的URL来查看各种方法的结果
具体来说,我有一个匹配“/”URL的方法,并返回一个纯HTML文件。
但是,当我部署到在Windows Server 2008上运行的IIS时,此方法将返回标准“您已创建服务”页面。
如果我尝试使用我指定的URI模板执行任何其他方法,例如:
api.hostname.com/Service.svc/method/param
服务器返回400 Bad Request。
我的live web.config的system.serviceModel部分如下所示:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="RootNamespace.Api.EventService"
behaviorConfiguration="RootNamespace.Api.EventServiceBehaviour" >
<endpoint address=""
binding="wsHttpBinding"
contract="RootNamespace.Api.IEventService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://api.hostname.com" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="RootNamespace.Api.EventServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我想知道请求是否没有达到WCF服务,并且被IIS中的另一个处理程序阻止但是它返回根URL的不同内容这一事实让我怀疑我正在做其他事情这里错了。
...更新
我已经设法通过修改的web.config进行了一些进展:
<behaviors>
<serviceBehaviors>
<behavior name="RootNamespace.Api.EventServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RootNamespace.Api.EventServiceBehavior"
name="RootNamespace.Api.EventService">
<endpoint address=""
binding="webHttpBinding"
behaviorConfiguration="WebBehavior"
contract="RootNamespace.Api.IEventService">
</endpoint>
</service>
</services>
这显然与我的第一次尝试有很大不同,但目标保持不变 - 我想使用Web浏览器导航到我的服务合同(IEventService)的WebGet属性中定义的URL。
使用此Web配置,而不是获得400错误,我现在收到我已定义的方法的403禁止错误。对于不存在的方法,我正确地接收到“未找到端点”消息。这让我觉得我的东西运行正常,但我只是在应用层遇到了某种身份验证问题。
我也觉得我让这太复杂了。毕竟,这在Visual Studio Web服务器中没有任何配置。
答案 0 :(得分:0)
我认为你的问题是:
如果您启用了服务元数据并且配置中包含httpGetEnabled=true
(并且您确实如此),则点击基地址(baseAddress="http://api.seetickets.com"
)将呈现元数据“您有一个服务“页面。这是默认的WCF行为。
你有一个“生活”在同一地址的介绍html页面 - &gt;你有冲突
你可以做两件事:
httpGetEnabled
或:
http://api.seetickets.com/intro
或其他内容(通过在服务方法上设置UriTemplate="....."
)