我在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调用内部网址而不是外部网址的问题?