解析Silverlight调用WCF/Rest异常的解决方法

解析Silverlight调用WCF/Rest异常的解决方法。下面我们来一步步讲解。

问题描述

在使用Silverlight调用WCF/Rest服务时,可能会遇到各种异常错误,比如:

  • System.ServiceModel.CommunicationException
  • System.ServiceModel.FaultException
  • System.Net.WebException等等。

那么,如何解决这些异常呢?接下来,将详细讲解这个问题。

解决方法

针对这个问题,我们可以有以下方式解决:

1. 在服务端增加配置

在服务端的web.config中添加以下配置:

<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint binding="customBinding" bindingConfiguration="crossDomain" contract="IMyService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/MyService/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <bindings>
    <customBinding>
      <binding name="crossDomain">
        <textMessageEncoding messageVersion="Soap11" />
        <httpTransport allowCookies="false" authenticationScheme="Anonymous" bypassProxyOnLocal="true" hostNameComparisonMode="WeakWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" useDefaultWebProxy="true"/>
      </binding>
    </customBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

2. 在客户端增加配置

在客户端的App.config中添加以下配置:

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding name="CustomBinding_IMyService">
        <textMessageEncoding messageVersion="Soap11" />
        <httpTransport maxReceivedMessageSize="2147483647" allowCookies="true" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" proxyAuthenticationScheme="Anonymous" realm="" useDefaultWebProxy="false" />
      </binding>
    </customBinding>
  </bindings>
  <client>
    <endpoint address="http://localhost:8000/MyService/" binding="customBinding" bindingConfiguration="CustomBinding_IMyService" contract="IMyService" name="CustomBinding_IMyService" />
  </client>
</system.serviceModel>

示例一:使用Rest服务获取数据

在服务端,我们可以创建TestService.svc文件,内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestService
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        [WebGet(UriTemplate = "/GetData/{value}", ResponseFormat = WebMessageFormat.Json)]
        string GetData(string value);
    }

    public class TestService : ITestService
    {
        public string GetData(string value)
        {
            return "You entered: " + value;
        }
    }
}

在客户端,我们可以使用以下代码调用服务:

private void CallRestService()
{
    WebClient client = new WebClient();
    client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnDownloadStringCompleted);
    client.DownloadStringAsync(new Uri("http://localhost:8000/TestService/GetData/123"));
}

private void OnDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        MessageBox.Show(e.Result);
    }
    else
    {
        MessageBox.Show(e.Error.Message);
    }
}

示例二:使用WCF服务获取数据

在服务端,我们可以创建TestService.svc文件,内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestService
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        string GetData(string value);
    }

    public class TestService : ITestService
    {
        public string GetData(string value)
        {
            return "You entered: " + value;
        }
    }
}

在客户端,我们可以使用以下代码调用服务:

private void CallWcfService()
{
    TestServiceClient client = new TestServiceClient();
    client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(OnGetDataCompleted);
    client.GetDataAsync("123");
}

private void OnGetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    if (e.Error == null)
    {
        MessageBox.Show(e.Result);
    }
    else
    {
        MessageBox.Show(e.Error.Message);
    }
}

通过以上方式,我们就可以解决Silverlight调用WCF/Rest异常的问题了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解析Silverlight调用WCF/Rest异常的解决方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Entity Framework Core 大小写敏感处理

      可以使用’StringComparison’吗? 在数据库查询操作中,不可避免去考虑字母大小写的问题,比如要在Movie表中查找“X-Men”这部电影,为了不区分字母大小写,按照Linq to memory的习惯,可能会写出如下代码: DbContext.DbSet<Movie>  .Where(item => string.Equal…

    C# 2023年4月19日
    00
  • C# Winform程序实现防止多开的方法总结【亲测】

    C# Winform程序实现防止多开的方法总结【亲测】 当我们同事启动我们编写的C# Winform程序时,有时会发现一个很尴尬的问题,同事同时启动了多个程序。这会给我们的程序带来一些问题,如系统资源的浪费等。因此,为了解决这个问题,我们有必要实现一个防止多开的功能。在本文中,我将介绍三种解决方案。 解决方案一:记录程序运行状态 为了能判断程序是否正在运行中…

    C# 2023年6月7日
    00
  • C#使用LOCK实现线程同步

    下面我将详细讲解如何使用C#中的lock语句实现线程同步。 什么是lock语句 lock语句是C#中用于保护共享资源的关键字。当多个线程访问一个共享资源时,可能会引发竞态条件(Race Condition)的问题,这时就需要使用lock语句来防止竞态条件的发生。lock语句会将一段关键代码标记为临界区,同一时间只允许一个线程进入临界区执行代码,其他线程需要等…

    C# 2023年6月1日
    00
  • C#实现实体类和XML相互转换

    让我来为大家详细讲解C#实现实体类和XML相互转换的完整攻略。 1. 为什么要进行实体类和XML转换 在许多实际开发中,我们需要将对象或实体类转换成XML格式,或者将XML转换成相应的对象或实体类。常见的场景包括将数据存储到XML文件中,或者将XML文件序列化为对象,以便于进行数据传输、存储和处理等操作。 2. 实现实体类和XML相互转换的核心模块 C#中提…

    C# 2023年6月8日
    00
  • Oracle数据远程连接的四种设置方法和注意事项

    Oracle数据远程连接的四种设置方法和注意事项 Oracle数据库是一款功能强大的数据库产品,可进行本地和远程连接。通过远程连接,可以让多个客户端连接到同一个数据库实例,实现共享数据的目的。在本文中,我们将详细讲解Oracle数据远程连接的四种设置方法和注意事项。 1. 设置监听器(Listener) 监听器是Oracle数据库与其他应用程序之间通信的重要…

    C# 2023年5月15日
    00
  • Base64编码解码原理及C#编程实例

    Base64编码是将二进制数据转换成可打印字符的编码方式,该编码方式需要使用64个可打印字符,即A-Z,a-z,0-9,+和/。 在Base64编码中,每个字符占用6个比特位,因此一个字节可以转换成两个Base64字符。其编码原理是将3个8位的二进制数据(即24个比特位)按照顺序依次作为高位到低位排列成4个6位的比特位组(即4个6位的二进制数据),转换成4个…

    C# 2023年6月6日
    00
  • C# 实现连连看功能(推荐)

    C# 实现连连看功能(推荐) 引言 连连看是一种受欢迎的游戏,早期多出现在各种小游戏网站和手机应用中。连连看的功能算法也较为复杂,本文将使用C#编程语言来实现连连看功能,供各位开发者参考。 分析 连连看的主要逻辑是,选择两个相同的图片,并且图片之间的连接线条不超过三条,即可消除这两个图片。为了实现这个功能,需要按照以下步骤来进行操作: 搭建界面 加载图片资源…

    C# 2023年6月6日
    00
  • c# 代码调试技巧和如何远程调试

    C# 代码调试技巧和如何远程调试攻略 在开发过程中,调试常常占据了我们相当大的时间,正确高效的调试技巧可以大大提高开发效率。本攻略将详细介绍 C# 代码调试技巧和如何远程调试,帮助开发者更快速地定位和解决问题。 一、C# 代码调试技巧 1. 使用断点调试 使用 Visual Studio 内置的断点功能是 C# 调试的基本技巧。在代码中插入断点,当程序运行到…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部