使用控制台应用程序消费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运行服务并手动调用它时,不会产生任何错误,并且该过程成功完成。
我会大胆猜测,说您的内容不是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需要代理认证