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

本文关键字:WCF 服务 应用程序 控制台 | 更新日期: 2023-09-27 18:04:47

我在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.

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

。反序列化(JsonReader阅读器,类型objectType, Boolean checkAdditionalContent)

在Newtonsoft.Json.JsonSerializer

。DeserializeInternal(JsonReader reader, Type objectType)

在Newtonsoft.Json.JsonConvert

。DeserializeObject(字符串值,类型类型,JsonSerializerSettings设置)

在Newtonsoft.Json.JsonConvert

。DeserializeObject[T](字符串值,JsonSerializerSettings设置)

在Newtonsoft.Json.JsonConvert

。DeserializeObject [T](字符串值)


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

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

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

我会大胆猜测,说您的内容不是JSON,而是HTML或XML/SOAP,给定

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

根据您的服务类型、项目类型和. 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测试客户端。在本地主机上尝试您的控制台应用程序。另外,你是否部署了一个web。配置还是你在网络下运行。已经存在的配置?您检查过是否有差异吗?

我终于弄明白是怎么回事了。

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

web api返回一个错误消息,其格式与我的WCF服务期望的不一致。

通过遵循这个答案,我能够解决我的问题,我知道它似乎与我原来的问题完全不同,但这是我的控制台应用程序所收到的。通过跟踪错误,我能够确定错误实际上是由我的WCF服务生成的,直到那时它一直正常工作。

407需要代理认证