我正在尝试使用wsHttpBinding
将WCF服务部署为Windows Azure角色。
当客户端尝试连接到它时,它会一直收到以下异常:
[SynchronizingContextState.Process] [System.Net.WebException: The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..]
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
这似乎表明该服务正在使用basicHttpBinding
。但是,我多次检查Web.config
并且似乎找不到任何错误。此外,在Azure外部托管时,相同的服务也可以正常运行。
我连接到Azure VM并确认部署了正确的Web.config
,但它看起来好像被忽略了,因为我无法获取服务元数据,即使它已被启用。
这是我的Web.config
文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="BackendServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="BackendServiceBinding" maxReceivedMessageSize="655360">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="MyNamespace.BackendService" behaviorConfiguration="BackendServiceBehavior">
<endpoint name="Backend" address="" binding="wsHttpBinding" bindingConfiguration="BackendServiceBinding" contract="MyNamespace.IBackendService" />
<endpoint name="BackendMex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/BackendService.svc" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
我在这里遗漏了什么吗?非常感谢你。
答案 0 :(得分:1)
您是否尝试添加端点行为?
<behavior name="web">
<webHttp />
</behavior>
(如果你想要MEX工作也可以这样做)
答案 1 :(得分:0)
好的,我终于修好了,这是PEBKAC的坏情况。 = /
我看到有人遇到同样的问题,因为他没有在服务名称中包含命名空间,所以我怀疑它是命名空间问题,但我一直在寻找错误的地方。
原来,该服务的Azure实现是在错误的命名空间中定义的。我纠正了它,现在它起作用了。
希望这对其他人有用,至少。