wcf - Xamarin.Forms 在 WCF 上添加连接服务仅生成异步方法
问题描述
我刚开始用 .Net Standard 2.0 (PCL) 项目做 Xamarin.Forms。我正在尝试使用我的 WCF Web 服务,但从未成功完成。
我创建了一个简单的 WCF,如下所示
[ServiceContract]
public interface IWcfConnection
{
[OperationContract]
string GetHelloWorld();
}
实现如下
public class WcfConnection : IWcfConnection
{
public string GetHelloWorld()
{
return "Hello World";
}
}
这是一个非常简单的 WCF,当我转到我的 Xamarin.Forms 并右键单击“连接的服务”时,没有“添加 Web 服务”,只有“添加连接的服务”,所以我选择如下
然后选择“Microsoft WCF Web 服务服务提供商”
选择如下选项(我取消所有选项,因为如果我添加超过 1 个服务,它会崩溃)
当我查看创建的 reference.cs 时,只创建了异步方法。
public System.Threading.Tasks.Task<string> GetHelloWorldAsync()
{
return base.Channel.GetHelloWorldAsync();
}
1)我可以知道为什么只创建 async 吗?是否适用于 .net 标准和核心,只会创建异步服务?当我在某处阅读时。
2) 如果是这样,我如何使用 Web 服务?
在我的 xaml.cs 文件中,我执行了以下操作,
WcfConnectionService.WcfConnectionClient client = new WcfConnectionService.WcfConnectionClient(new WcfConnectionService.WcfConnectionClient.EndpointConfiguration());
string abc = client.GetHelloWorldAsync().GetAwaiter().GetResult();
但是我遇到了错误并且无法相应地工作。有人知道吗?
未处理的异常:
System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]:反序列化操作“GetHelloWorld”的请求消息正文时出错。OperationFormatter 遇到无效的消息正文。预计会找到名称为“GetHelloWorld”和命名空间“ http://tempuri.org/ ”的节点类型“元素”。找到名为“GetHelloWorldAsync”和命名空间“ http://tempuri.org/ ”的节点类型“Element”
解决方案
目前,Xamarin 应用与 WCF Web 服务参考连接的服务提供程序为 .NET 标准项目生成的基于任务的异步 WCF 代理方法不兼容(bugzilla.xamarin.com错误 51959)。
通过选中“配置 WCF Web 服务参考”屏幕上的“生成同步操作”复选框生成旧的兼容样式的 WCF 代理方法:
使用网络服务:
KimlikServiceReference.KPSPublicSoapClient soapClient = new KimlikServiceReference.KPSPublicSoapClient(KimlikServiceReference.KPSPublicSoapClient.EndpointConfiguration.KPSPublicSoap);
//KimlikServiceReference.TCKimlikNoDogrulaResponse response = soapClient.TCKimlikNoDogrulaAsync(TCKimlikNo, Ad, Soyad, DogumYili).Result;
bool result = soapClient.TCKimlikNoDogrula(TCKimlikNo, Ad, Soyad, DogumYili);
推荐阅读
- rails-activerecord - ActiveRecord 查询不返回任何结果,但它产生的原始 sql 返回结果
- python - 我正在尝试使用 pandas.DataFrame.replace 替换包含具有单个值的列表的单元格?
- reactjs - 在reactjs中获取数据后如何将数据显示到输入字段
- java - 如何从 Java 中的 XML 响应中获取特定的字段值?
- google-chrome - 无法在 docker 中运行 chromedp
- c# - 从特定种子生成特定字符串
- laravel - 一条记录的唯一查询
- dbeaver - 如何安装 DBeaver 的示例数据库?
- python - 变量列表中的python字典
- reactjs - 开玩笑测试 React Native:找不到导航对象。您的组件是否在导航器的屏幕内?