我为长篇大论道歉... 我们有一个用组织内部使用的.Net 4.0编写的WCF服务。最近需要在组织网络之外提供此服务。因此,网络人员使用反向代理在组织外部提供此服务。以下是如何设置的图片。
如图所示,服务http://mywebservice.com/readd.svc托管在WIndows 2008 R2上,其内部IP地址为XXX.YYY.ZZZ.RRR。该服务托管在端口80上。
问题是什么?。
在内部,我可以使用WCFTestClient和浏览器以http://mywebservice.com/readd.svc访问服务。但是如果我输入http://mywebservice.com/readd.svc,我会得到" 404文件找不到错误"在WCFTestCleint中我得到错误"错误:无法从http://mywebservice.com/readd.svc获得元数据........."。
但是,如果我在浏览器中键入服务,我会看到显示soap链接的屏幕,如下所示。请忽略LookUpService.svc名称不匹配。
如上图所示......地址栏为https,但soap链接为http。如果我点击http链接http:// ....?wsdl,我找不到错误。这是因为反向代理仅允许连接为https。
如果我使用WCFTextClient并将servicie添加为https://mywebsite.com/readd.svc,我会收到如下错误。
"错误:无法从https://mywebsite.com/readd.svc获取元数据如果这是Windows(R)
您有权访问的Communication Foundation服务,请检查您的访问权限
在指定地址启用元数据发布。有关启用元数据发布的帮助
请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange错误中的MSDN文档
URI:http://mywebsite.com/readd.svc元数据包含无法解析的引用:
' https://mywebsite.com/readd.svc&#39 ;.内容类型application / soap + xml; charset = utf-8不受支持
按服务https://mywebsite.com/readd.svc。
客户端和服务绑定可能不匹配
远程服务器返回错误:(415)OK.HTTP GET错误
URI:https://mywebsite.com/readd.svc
网址http://mywebsite.com/readd.svc上的文件未被识别
作为已知文档类型。每种已知类型的错误消息可能对您有所帮助
解决问题: - 来自' XML Schema'是
'无法识别文档格式(内容类型为' text / html; charset = UTF-8')。' .-
来自' http://mywebsite.com/readd.svc'的报告是
'无法识别文档格式(内容类型为' text / html; charset = UTF-8')。' .-
来自' DISCO Document'的报告是'下载' http://mywebsite.com/readd.svc?disco'。'时出错。 -
请求失败,HTTP状态为404:Not Found.-来自' WSDL Document'是'文档格式无法识别(内容类型为' text / html; charset = UTF-8')。'。 "
网络人员通知我以https的形式提供服务。这是我的web.config文件
<behaviors>
<serviceBehaviors>
<behavior name="ServiceLookup.LookupServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceLookup.LookupServiceBehavior" name="SmallApp.ServiceLookUp.LookUpService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BSBindingConfig" name="SmallApplianceBSEndPoint"
contract="SmallApp.ServiceLookUp.ILookupService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<!-- Remove this during deployment-->
<!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>-->
你能否建议如何解决这个问题..因此,组织外的用户可以使用WCFTestCleint作为http / https访问api。
更新了web.config文件
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceLookup.LookupServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceLookup.LookupServiceBehavior" name="SmallApp.ServiceLookUp.LookUpService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BSBindingConfig" name="SmallApplianceBSEndPoint"
contract="SmallApp.ServiceLookUp.ILookupService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<!-- Remove this during deployment-->
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
我仍然在访问组织网络外的http或https时出现错误
答案 0 :(得分:0)
答案 1 :(得分:0)
通常根据模型的元数据,属性和主机位置动态生成WSDL。因此,如果将wsdl代理到另一个环境,则会出现问题。
servicemetadata
中的一个逃生舱口是指定 externalMetadataLocation
:
一个Uri,其中包含WSDL文件的位置,该文件将响应WSDL和MEX请求而不是自动生成的WSDL返回给用户。
在下面添加externalMetadataLocation
,如下所示:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"
externalMetadataLocation="https://example.com/SOAP/Service1.wsdl" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
然后,您可以提前预先生成WSDL,随意进行调整,然后上传修改后的文件作为合同。