问题标签 [webhttpbinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1275 浏览

wcf - 通过代码添加 ServiceHost 扩展

我有一个App.config在这里找到的 XML 剪辑:

由于某些原因,我不想对程序集进行硬编码,也不想为此使用 XML 文件。

目前我使用这段代码:

但是最后一行不起作用,我该如何解决?我认为必须可以通过代码来做到这一点。


目前,我几乎找到了一个解决方案,当我尝试使用 JsonSerialisator 时,我遇到了一个问题,但是我现在使用这个绑定:

GZipMessageEncoder稍作修改以使压缩成为可选:

但是我的代码在标记行中调试时让 Visual Studio 崩溃。有任何想法吗?

0 投票
2 回答
8778 浏览

c# - 如何为 WCF ServiceContract 设置默认的 RequestFormat?

我正在编写一个有很多方法的网络服务。它们的设置都类似于以下内容:

我要做的只是在 web.config 文件中设置默认值BodyStyle// all RequestFormatResponseFormat现在,我知道我可以做到这一点:

但似乎没有 RequestFormat 的属性。如何将默认设置RequestFormat为 JSON?

0 投票
1 回答
1463 浏览

wcf - 扩展名“webHttp”未在 system.serviceModel/extensions/behaviorExtensions 的集合中注册

我在 IIS 6.1 中托管 REST 服务。我收到以下错误。

有什么办法可以解决这个问题?

0 投票
1 回答
2461 浏览

asp.net - WCF 说它超出了最大查询字符串值,而实际上没有

我有一个webHttpBinding使用 ASP.NET 4/IIS 8的 WCF 服务(通过GET. 但是,今天我需要实现一个发送大查询字符串的方法(大约 3000 个字符,没有那么长,但比我一直使用的要长)。我调用了该服务并立即收到 404 错误,甚至没有在我的调试机器上进入我的代码。我首先想到的是最大查询字符串长度限制。我已将此添加到我的 web.config 中:

现在,当我调用该服务时,我收到了这个服务器错误:The length of the query string for this request exceeds the configured maxQueryStringLength value.很奇怪,我已经尝试了其他值,例如200000, 超过我的查询字符串和 URL,大约 3000 个字符。我错过了什么吗?

0 投票
1 回答
960 浏览

.net - WCF 如何通过 ASP.NET 路由确定 webHttpBinding 中使用的端点地址?

我的 Web 应用程序中的一些 Silverlight 代码使用了 WCF 服务。它使用 ASP.NET 路由功能:

这目前适用于我们的生产环境。

在其他一些环境中,我得到了例外

System.InvalidOperationException:找不到与具有绑定 WebHttpBinding 的端点的方案 http 匹配的基地址。注册的基地址方案是 [https]。

我刚刚将完全相同的代码部署到我们的集成环境和培训环境。它在集成中有效,但在训练中失败。两种环境都运行相同版本的 Windows Server 2008 R2 Enterprise,以及相同版本的 IIS 7.5。两者都在 IIS 中配置了相同的绑定(所有 IP 地址上的端口 443 和 80)。

我已经对代码进行了检测,可以看到当它工作时,服务正在使用 http 和 https。失败时,仅使用 https。两个系统之间的 web.config 是相同的。

我知道,通常,对于托管在 IIS 应用程序中的服务,WCF 使用 IIS 中的绑定信息。在这种情况下,正在使用 ASP.NET 路由功能。

WCF 如何确定要使用的基地址?


更新:这是我们 web.config 文件的摘录:


编辑

另一个提示:Training 环境的 IIS 中设置了“SSL Required”,在 Integration 环境中清除了。在培训环境中清除它可以防止服务器端异常。现在,两种环境中的 WCF 日志都显示正在考虑 http 和 https 地址。

现在的问题是:当请求以 https 形式到达时,为什么 WCF 认为它需要 http?

0 投票
1 回答
2234 浏览

wcf - wsHttpBinding 在自托管的 WCF 服务中不起作用;基于 SOAP 的绑定确实有效

我有一个简单的 WCF 服务,如下所示。

服务器 Web.config 文件是

客户端是一个控制台应用程序,其 App.config 是这样的。

客户端程序是这样的。

basicHttpClient 和 wsHttpClient 完美运行。但是,webHttpClient 抛出异常“System.ServiceModel.CommunicationException 未处理,HResult=-2146233087,Message=Internal Server Error”

我无法在服务器端进行调试,因为 Visual Studio 2012 显示“无法自动调试 'MyProject'。无法调试远程过程。这通常表明服务器上尚未启用调试。”

但是,调试已启用。在启用诊断的情况下使用 SvcTraceViewer 我无法获得任何见解。

我的主要兴趣是找出使用 WebHttpBinding 的 REST 调用失败的原因,但帮助让服务器端调试工作也将不胜感激。我正在使用多个启动项目在 VS2012 中调试客户端和服务器。本地主机是唯一涉及的服务器。

我知道 REST 端点不会出现在 WcfTestClient 中,因为它不提供元数据交换,但我希望能够通过该端点调用服务,并且我发现我的代码和调用 RESTful WCF 服务的示例之间没有区别。

0 投票
1 回答
566 浏览

json - WCF wsHttpBinding、webHttpBinding 和 REST 中的 InstanceContextMode.Single

我最近开始开发一个相对简单的 WCF REST 服务,它返回 JSON 格式的结果。起初一切都很好,服务很快就启动并运行了。

该服务的主要功能是返回从数据库中提取的大量数据。这些数据很少改变,所以我决定尝试设置一个缓存机制来加快速度。为此,我计划设置 InstanceContextMode.Single 和 ConcurrencyMode.Multiple,然后使用一些线程锁,安全地返回静态缓存结果。每隔 5 分钟左右,或者每当 IIS 决定清除所有内容时,都会从数据库中重新获取数据。

我的问题是 InstanceContextMode.Single 没有按预期运行。我的理解是应该创建和维护我的 WCF 服务类的单个实例。但是,我的行为是每次调用都会创建我的 Class 的全新实例。这包括重新初始化所有静态变量。

我尝试将 Web 服务从 webHttpBinding(用于 REST)更改为 wsHttpBinding 并将该服务用作 SOAP 配置,但这会导致完全相同的行为。

我究竟做错了什么!!!花了太长时间试图弄清楚这一点。

任何帮助都会很棒!

0 投票
1 回答
432 浏览

wcf - 如何使 ClientAccessPolicy.xml 的 WebHttpBehavior 停止窃取/劫持 IIS 的根目录?

我正在使用具有 net.tcp WCF 通信的 Silverlight 应用程序。我想在 ServiceHost 中自行托管 ClientAccessPolicy.xml,并且根据 Silverlight net.tcp 要求(TCP 端口 4502-4534 等),策略文件必须位于根端口 80 上。我的问题是,当我的 ServiceHost 运行时,它从 IIS 窃取端口 80 根,我的网页都没有工作。

创建策略端点的代码如下所示:

当 ServiceHost 运行时,我可以看到我的http://127.0.0.1/ClientAccessPolicy.xml,但端口 80 上的所有网站都停止工作 - 我看到由端点生成的标准 WCF“找不到端点”网页。当我关闭 ServiceHost 时,我可以看到我的网站,但 ClientAccessPolicy.xml 不见了。

我尝试使用端点 URI 的完整路径:

但这会引发参数异常。将策略移至子目录或其他端口将不起作用,因为 Silverlight 仅查看根 Web 目录上的端口 80。

显然,我可以将 ClientAccessPolicy.xml 复制到 Web 根目录并禁用策略端点。有没有办法关闭端点,以便它只劫持对 ClientAccessPolicy.xml 的调用,但不会窃取整个 IIS 端口 80?

0 投票
1 回答
805 浏览

wcf - WCF webHttpBinding 服务在本地工作,但在 IIS 7.5 上产生“400 Bad Request”

我有一个带有 webHttpBinding 绑定的 WCF 服务,该服务在 Visual Studio 2010/本地 IIS 中运行良好。该服务只有一个 POST 方法,我的单独 Web 应用程序项目通过 .NET 的 HttpWebRequest 对象调用该方法。JSON 用于请求和响应。请求和响应包含由 DataContractJsonSerializer 转换为 JSON 和从 JSON 转换的对象。

一旦我将服务部署到同一网络上的另一台 Windows Server 2008 R2 机器,它会生成“400 Bad Request”以响应在本地正常工作的完全相同的调用代码。“调用代码”是指在 Visual Studio 中运行的 Web 应用程序。

通过浏览器查看 .svc 文件没有问题。

该请求小于 1 kB,因此大小似乎不是问题。以防万一我还调整了服务的 Web.config 以允许更大的请求,但这并没有帮助。

0 投票
1 回答
195 浏览

wcf - WCF 服务间消息传递

我正在构建一个带有 2 个 WCF 服务的系统。两者都是 IIS 托管的。目前,它们都驻留在一个 VS2010 网站应用程序中,使用 Derfault 网站在我的本地 IIS7(Windows 7)上运行。我在两者上都启用了 net.tcp。

服务1

  • 使用 webHttpBinding 接受 HTTP 帖子
  • 将数据包装在可序列化的复合对象中
  • 使用 netMsmqBinding 将复合对象发送到 Service2(我们希望)

服务2

  • 收到所述消息并对其进行处理

服务 1 按预期工作,但是我们的代码不是将消息放在配置的私有队列上,而是在“传出队列”下创建一个新队列,并带有句柄

当然,Service2 永远不会看到该消息——这是我第一次尝试这种结构,所以我不确定 Service2 是否因为它的位置而错过了该消息,但根据我所读到的内容,它似乎是这样的——我没有遇到任何提及此队列创建行为的内容。

问题:

  1. 我这样做是否正确(结构、web.config 或代码有问题)?

  2. 在 VS Debug 中正确完成后,Service1 的

    proxy.ProcessForm(formMessage);

在我的 Service2 代码中打断点,还是有另一种方法来处理 Service2 调试(例如,ala windows 服务)?

服务 1 Web.Config

收到 HTTP Post Service1 时执行以下操作: