反向代理后面的WCF服务会为JavaScript生成错误的URL

时间:2017-09-01 16:34:05

标签: javascript c# asp.net wcf reverse-proxy

我在IIS中运行的ASP.NET应用程序位于反向代理之后。该应用程序公开了一个从JavaScript

中使用的WCF服务

通过JavaScript访问此服务时,会自动创建JavaScript代理,但它指向本地服务器(代理后面),而不是公共URL。

从我能找到的所有内容中,解决方案是将useRequestHeadersForMetadataAddress元素添加到behavior的{​​{1}}元素中。但是,当我们这样做时,抛出以下异常:

  

System.ServiceModel.ServiceActivationException:该服务   ' /Web/Services/ServiceBroker.svc'由于a无法激活   编译期间的异常。异常消息是:无法添加   ' useRequestHeadersForMetadataAddress'行为延伸到   ' WcfAjaxEndpointBehavior'端点行为,因为底层   行为类型不实现IEndpointBehavior接口。

我也试过手动指定endpointBehaviors,没有效果。

来自web.config:

baseAddress

我已经考虑过实施<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="WcfAjaxEndpointBehavior"> <enableWebScript /> <useRequestHeadersForMetadataAddress /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="WcfAjaxServiceBehavior"> <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <service name="FoodSafety.WebUI.Services.ServiceBroker" behaviorConfiguration="WcfAjaxServiceBehavior"> <endpoint address="https://(public url)/Web/Services/ServiceBroker.svc" listenUri="https://(local url)/Web/Services/ServiceBroker.svc" behaviorConfiguration="WcfAjaxEndpointBehavior" bindingConfiguration="AjaxServiceBinding" binding="webHttpBinding" contract="FoodSafety.WebUI.Services.ServiceBroker" /> <baseAddresses> <add baseAddress="https://(public url)/Web/Services/ServiceBroker.svc" /> </baseAddresses> </service> </services> <bindings> <webHttpBinding> <binding name="AjaxServiceBinding"> <security mode="Transport" /> </binding> </webHttpBinding> </bindings> </system.serviceModel> ,但我不明白我将如何解决这个问题,甚至是哪个类应该实现它。我找不到这个功能的例子。

我也尝试了this (unanswered) question,的所有解决方案而没有运气。

我需要做些什么才能解决JavaScript调用内部网址而不是外部网址的问题?

0 个答案:

没有答案