-6ren"> -这既是给遇到问题的人提供的信息,也是一个问题。 编辑:问题是为什么要删除“www”。当在同一地址运行的网站可以在没有“www.”的情况下引用时,来自 URL 会导致此错误。 在解决了将服务从本地 II-6ren">
gpt4 book ai didi

hosting - 共享主机上的 WCF 服务响应 "HTTP/1.1 400 Bad Request"<又名空白页,XML 解析错误,无效地址,找不到网页>

转载 作者:行者123 更新时间:2023-12-04 21:51:27 25 4
gpt4 key购买 nike

这既是给遇到问题的人提供的信息,也是一个问题。

编辑:问题是为什么要删除“www”。当在同一地址运行的网站可以在没有“www.”的情况下引用时,来自 URL 会导致此错误。

在解决了将服务从本地 IIS 移动到共享主机时面临的常见配置问题后,我最近使用一个简单的 WCF 服务(来自 endpoint.tv 的服务)重现了这个问题。

问题是在浏览器中检查 url 时的以下响应(来自 fiddler)。 在网上搜索有关该主题的帖子时,除了通常的共享主机配置问题修复它们的帖子之外,我发现了许多指向同一问题的未解决问题。

HTTP/1.1 400 错误请求
服务器:Microsoft-IIS/7.0
X-Powered-By: ASP.NET
日期:2010 年 8 月 17 日星期二 00:27:52 GMT
内容长度:0

在 Safari/Chrome 中,这表现为一个空白页面。

在 IE 中,您会收到“找不到网页”。

在 FF 中,您会收到“XML Parsing Error: no element found Location: http://................ Line Number 1, Column 1:”(我在许多 Unresolved 帖子中看到在网络上 - 随时反向链接可能的解决方案)

在 Opera 中,您会收到“无效地址”

我为此挠了一阵子,然后我想试试输入“www”。我之前省略了来自我的网址,没有特别的原因。

问题解决了。

我现在可以在浏览器中看到正常的输出,并通过 WCF 测试客户端与服务进行交互。

所以问题是:

为什么这会对托管的 WCF 服务产生影响 当我知道浏览托管在同一地址的网站没有区别时?有或没有“www”。我可以浏览到托管在同一帐户上的同一域中的网站。

到目前为止,我已经在 GoDaddy 服务上测试了这个 repro。我以后可能会尝试其他一些。

此外,如果您碰巧知道 - 我很想知道哪些功能可能使我的 WCF 服务需要完全信任而不是中等信任。以及您对使用这些功能是否是一个好主意的任何想法(在最小隐私意识形态的背景下)。

作为引用,这是 web.config,包括 Mike 建议尝试解决此问题的附加端点。

<?xml version="1.0"?>
<configuration>

<system.web>
<customErrors mode="Off"/>
<compilation><!--debug="true"-->
<buildProviders>
<remove extension=".svc"/>
<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider,System.ServiceModel, Version=3.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</buildProviders>
</compilation>
</system.web>

<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service behaviorConfiguration="blah"
name="WCFServ.EvalService">
<endpoint address="http://www.abcdomain.com/WCFServ/WCFServ.EvalService.svc"
binding="basicHttpBinding"
contract="WCFServ.IEvalService" />
<endpoint address="http://abcdomain.com/WCFServ/WCFServ.EvalService.svc"
binding="basicHttpBinding"
contract="WCFServ.IEvalService" />
<!--<endpoint address=""
binding="mexHttpBinding"
contract="IMetadataExchange" />-->
<!--<host>
<baseAddresses>
<add baseAddress="http://abcdomain.com/WCFServ/" />
</baseAddresses>
</host>-->
</service>
</services>


<behaviors>
<serviceBehaviors>
<behavior name="blah">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>

<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.abcdomain.com/WCFServ/"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>

</system.serviceModel>




<!--http://localhost/WCFServ/WCFServ.EvalService.svc-->

<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

最佳答案

因为您使用绝对 URL 作为端点地址,所以 WCF 需要查看 HTTP 请求中的特定主机 header 才能绑定(bind)到这些地址。

Web 服务器也不异常(exception)。如果它们是为特定主机配置的,则请求 header 必须具有主机名,否则它们将不会提供内容。但是,多个主机名可以绑定(bind)到网站,因此有时一个站点可能会同时绑定(bind)到 www.example.com 和 example.com。此外,如果您访问 example.com 并获得 404 或 DNS 查找失败,某些 Web 浏览器将自动重试 www.example.com 上的请求。

我认为解决问题的最简单方法是修改端点,使其与主机无关。例如:

<services>
<service behaviorConfiguration="blah" name="WCFServ.EvalService">
<endpoint address="/WCFServ/WCFServ.EvalService.svc"
binding="basicHttpBinding"
contract="WCFServ.IEvalService"/>
</service>
</services>

<!-- Just leave this out
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.abcdomain.com/WCFServ/"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
-->

关于hosting - 共享主机上的 WCF 服务响应 "HTTP/1.1 400 Bad Request"<又名空白页,XML 解析错误,无效地址,找不到网页>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com