使用控制台应用程序使用WCF服务

时间:2014-05-23 03:22:00

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

我在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 = "";
}

然后在服务中生成以下错误

"解析值时遇到意外的字符:<。路径'',第0行,第0位。"


例外明细:

{ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为:

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

&LT ;.路径'',第0行,第0位。

at Newtonsoft.Json.JsonTextReader.ParseValue()

在Newtonsoft.Json.JsonTextReader.ReadInternal()

在Newtonsoft.Json.JsonTextReader.Read()

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

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

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

at Newtonsoft.Json.JsonConvert.DeserializeObject(String value,Type type,JsonSerializerSettings settings)

at Newtonsoft.Json.JsonConvert.DeserializeObject [T](String value,JsonSerializerSettings settings)

at Newtonsoft.Json.JsonConvert.DeserializeObject [T](String value)


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

当我运行该服务并使用Visual Studio中的Test Client手动调用它时,不会产生任何错误并且该过程成功完成。

2 个答案:

答案 0 :(得分:3)

我会猜测并说你的内容不是JSON,而是HTML或XML / SOAP,给定<字符在0,0?你能确认一下响应格式是什么吗?

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

根据您的服务类型,项目类型和.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下运行?您是否检查过是否存在差异?

答案 1 :(得分:0)

我最终搞清楚发生了什么事。

我的控制台应用程序正在调用WCF服务,而该服务又消耗了一个web api。

web api以一种不是我的WCF服务所期望的格式返回错误消息。

通过以下回答,我能够解决我的问题,我知道它与我原来的问题看起来非常不同,但这就是我的控制台应用程序收到的内容。通过跟踪错误,我能够确定错误实际上是由我的WCF服务生成的,直到那时才能正常工作。

  

407 Proxy Authentication Required