3

从 WCF 到 DotNet 访问方法时出现以下错误

内容类型 text/html;响应消息的 charset=utf-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 1024 个字节是:' 运行时错误正文 {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} p {font-family:"Verdana";字体重量:正常;颜色:黑色;边距顶部:-5px} b {字体系列:“Verdana”;字体重量:粗体;颜色:黑色;边距顶部:-5px} H1 {字体系列: “Verdana”;字体粗细:正常;字体大小:18pt;颜色:红色 } H2 { 字体系列:“Verdana”;字体粗细:正常;字体大小:14pt;颜色:栗色 } pre {font-家庭:“Lucida 控制台”;字体大小:。9em} .marker {字体粗细:粗体;颜色:黑色;文本装饰:无;} .version {颜色:灰色;} .error {margin-bottom:10px;} .expandable { 文本装饰:下划线;字体粗细:粗体;颜色:海军蓝;光标:手;}

<body bgcolor="white">

        <span><H1>Server Error in '/ORSXMLWCFServiceNew' Application.<hr width=100% size=1 color=silver></H1>

        <h2> <i>Runtime Error</i> </'.

请帮助我。

4

2 回答 2

7

我找到了一种获得完整响应的方法,而不仅仅是无用的 1024 字节......

using (var client = new Service1Client())
{
    try
    {
        Console.WriteLine(client.DoWork());
    }
    catch (ProtocolException e)
    {
        var webException = e.InnerException as WebException;

        var responseString = webException.ExtractResponseString();

        if (string.IsNullOrEmpty(responseText))
            Console.WriteLine(e);
        else
            Console.WriteLine(responseString);
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
}

使用以下辅助方法的地方

public static string ExtractResponseString(this WebException webException)
{
    if (webException == null || webException.Response == null)
        return null;

    var responseStream = webException.Response.GetResponseStream() as MemoryStream;

    if (responseStream == null)
        return null;

    var responseBytes = responseStream.ToArray();

    var responseString = Encoding.UTF8.GetString(responseBytes);
    return responseString;
}

有关更多详细信息,请参阅我的博客http://mnaoumov.wordpress.com/2012/09/28/wcf-protocolexception/

于 2012-09-28T09:29:23.083 回答
0

这是由您的 WCF 服务上的错误引起的,修复它的最佳方法(在检查您的代码是否有任何明显的内容之后)是在 WCF 服务上进行一些错误日志记录并检查日志中的任何异常。

这些可能会有所帮助:

将日志记录添加到 WCF

创建日志记录类

于 2012-05-11T10:12:19.357 回答