【问题标题】:Consuming a WCF Service with a Console Application使用控制台应用程序使用 WCF 服务
【发布时间】:2014-05-23 03:21:59
【问题描述】:

我在 C# 控制台应用程序中使用 WCF 服务时遇到问题。

这是我用来使用服务的代码。

WCFServiceReference.WCFInterfaceClient client = new WCFInterfaceClient();

            try
            {
                WCFInterface x = client.WCFInterface();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

WCF 接口代码

public interface WCFInterface
{
    [OperationContract]
    WCFInterface WCFInterface();
}
[DataContract]
public class WCFInterface
{
    [DataMember]
    public string URI1 = "";
    [DataMember]
    public string URI2 = "";
    [DataMember]
    public string URI3 = "";
}

这会在服务中生成以下错误

“解析值时遇到意外字符:<.path line position>


异常详情:

{一个异常详细信息,可能由 IncludeExceptionDetailInFaults=true 创建,其值为:

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:

<.>

在 Newtonsoft.Json.JsonTextReader.ParseValue()

在 Newtonsoft.Json.JsonTextReader.ReadInternal()

在 Newtonsoft.Json.JsonTextReader.Read()

在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)

在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)

在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)

在 Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings 设置)

在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置)

在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值)


我可以看到我的服务中正在生成错误,我遇到的问题是我不知道为什么会触发它。

当我运行该服务并使用 Visual Studio 中的测试客户端手动调用它时,不会产生错误并且该过程成功完成。

【问题讨论】:

    标签: c# wcf json.net console-application


    【解决方案1】:

    如果

    您是否在创建客户端存根后更改了服务的响应格式?

    根据您的服务类型、项目类型和 .NET 框架版本,您可以通过多种方式完成此操作。

    尝试使用 WebInvoke 属性将 RequestFormat 硬编码为 JSON:

     [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]
    

    您还可以让您的服务自动检测并支持 JSON 和 SOAP:

    http://blogs.msdn.com/b/endpoint/archive/2010/01/18/automatic-and-explicit-format-selection-in-wcf-webhttp-services.aspx

    但是,对我来说,这不是一个解决方案,只是一个健全性检查。

    真正的问题是为什么在部署时它会发生变化?

    在您部署时格式发生变化的事实告诉我,环境配置不同,或者您没有针对您的开发服务测试控制台应用程序。在您说您正在使用 Visual Studio 测试客户端的问题中。针对 localhost 尝试您的控制台应用程序。另外,您是部署了 web.config 还是在已经存在的 web.config 下运行?你检查过是否有差异吗?

    【讨论】:

    • WCF Service 正在处理的响应类型肯定是 JSON。
    • 我有点迷失为什么它不能与控制台应用程序一起使用
    • 那么它不应该以
    • 控制台app和服务之间的内容是txt/xml; charset=utf-8 使用 Fiddler
    • 也说是肥皂动作
    【解决方案2】:

    我最终弄清楚发生了什么。

    我的控制台应用正在调用 WCF 服务,而该服务又在使用 Web api。

    Web api 以我的 WCF 服务不期望的格式返回错误消息。

    通过遵循这个答案,我能够解决我的问题,我知道这似乎与我原来的问题有很大不同,但这就是我的控制台应用程序收到的内容。通过跟踪错误,我能够确定错误实际上是由我的 WCF 服务生成的,该服务在此之前一直正常工作。

    407 Proxy Authentication Required

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多