.net Silverlight&x2B;WCF异常:应为应用程序/soap+;xml,接收文本/xml

.net Silverlight&x2B;WCF异常:应为应用程序/soap+;xml,接收文本/xml,.net,wcf,silverlight,exception-handling,wcf-configuration,.net,Wcf,Silverlight,Exception Handling,Wcf Configuration,我有一个Silverlight应用程序,我想在其中调用WCF服务。调用服务时,我从服务器收到以下响应: 415无法处理消息,因为内容类型为“text/xml”;charset=utf-8“不是预期的类型”application/soap+xml;字符集=utf-8 以前有人遇到过这个问题吗?有人知道我需要调整哪些配置设置吗?请提供有关如何解决此问题的任何信息。好的,您可以尝试在VS2008中使用“Silverlight启用的WCF服务”模板,并比较它们之间的差异?我希望您需要使用basicHtt

我有一个Silverlight应用程序,我想在其中调用WCF服务。调用服务时,我从服务器收到以下响应:

415无法处理消息,因为内容类型为“text/xml”;charset=utf-8“不是预期的类型”application/soap+xml;字符集=utf-8


以前有人遇到过这个问题吗?有人知道我需要调整哪些配置设置吗?请提供有关如何解决此问题的任何信息。

好的,您可以尝试在VS2008中使用“Silverlight启用的WCF服务”模板,并比较它们之间的差异?我希望您需要使用
basicHttpBinding
,并且正在使用更奇特的东西

有关信息,请参阅默认Silverlight/WCF服务的web.config部分:

 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>
    <behavior name="MySite.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="MySite.Service1Behavior"
       name="MySite.Service1">
    <endpoint address="" binding="basicHttpBinding"
       contract="MySite.Service1" />
    <endpoint address="mex" binding="mexHttpBinding"
       contract="IMetadataExchange" />
   </service>
  </services>
 </system.serviceModel>

服务可能正在引发异常。异常消息的格式不是服务调用所期望的格式,因此出现了“非预期类型”消息

如果调用的方法没有在内部引发异常,请根据Marc Gravell的有用回答检查服务或其他配置项的安全设置

有两种方法可以检查异常:详细查看异常消息,或跟踪WCF服务调用

  • 要查看异常消息,请在服务调用周围放置一个try-catch,并在catch块中设置一个断点。这将允许您检查异常内容。您可能希望将服务临时配置为

  • 通过启用服务的消息日志记录,可以轻松跟踪WCF消息。您可以在配置文件(请参阅)或使用WCF服务配置编辑器(在VS 2008工具菜单下提供,或右键单击配置文件)中执行此操作。然后使用服务跟踪查看器浏览日志文件。查看器是SDK的一部分,可以在以下位置找到:
    “C:\Program Files\Microsoft SDK\Windows\v6.0A\bin\SvcTraceViewer.exe”


  • 您可以使用更改WCF web服务上任何方法中响应的内容类型

    下面的代码显示了如何使用此类将内容类型设置为application/xml并返回UTF-8编码的流:

    [ServiceContract]
    public interface IPolicyProvider
    {
        [OperationContract, WebGet(UriTemplate = "/ClientAccessPolicy.xml")]
        Stream ProvidePolicy();
    }
    
    public sealed class StockService : IPolicyProvider
    {
        public Stream ProvidePolicy()
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream( Encoding.UTF8.GetBytes(File.ReadAllText("ClientAccessPolicy.xml"))  , false);
        }
    }
    
    如果您感兴趣,这个示例是为了在自托管WCF web服务中为Silverlight客户端启用跨域调用,请查看更多信息,我有一个代码下载

    在您的情况下,对于来自WCF服务的响应,您可以将内容类型设置为application/soap+xml,并使用UTF-8

    WebOperationContext类位于System.ServiceModel.Web程序集中,是.NET Framework 3.5的一部分


    希望这有帮助。

    我在尝试将Silverlight应用程序连接到WCF服务时遇到此错误

    根本原因是WCF服务是使用wsHttpBinding绑定的,而Silverlight只支持basicHttpBinding


    所以,请检查web.config中的
    元素,并确保服务的绑定信息位于
    元素中,并且服务定义的
    元素使用basicHttpBinding。

    谢谢您提供的信息……结果是服务器上为wsHttpBinding配置了一个服务。谢谢您提供的信息Tom,我的一个服务被配置为wsHttpBinding。写得不错谢谢Peter…你的便条实际上是一个很好的知识珍品。我的问题是服务器上的wsHttpBinding设置不正确。