zoukankan      html  css  js  c++  java
  • SilverlightCatchWcfError

    SliverLight捕捉WCF服务异常,

    1 Contract

    [ServiceContract]
        public interface IWCFService
        {
            [OperationContract]
            int  DoWork(int a,int b);

            [OperationContract]
            int DoWork2(int a, int b);

            [OperationContract]
            int DoDevide(int a, int b, ref string errorMessage);

            [OperationContract]
            int Devide(int a, int b, ref Exception error);
        }

    2 Service

    public class WCFService : IWCFService
        {
            public int DoDevide(int a, int b, ref string errorMessage)
            {
                if (b == 0)
                {
                    errorMessage = "Devided by Zero";
                    return 0;
                }
                errorMessage = "11111";
                return a / b;
            }

            public int Devide(int a, int b, ref Exception error)
            {
                try
                {
                    error = null;
                    return a / b;
                }
                catch (Exception ex)
                {
                    error = ex;
                    return 0;
                }
            }
        }

    3 跨域访问策略服务接口

    [ServiceContract]
        public interface IDomainService
        {
            [OperationContract]
            [WebGet(UriTemplate = "ClientAccessPolicy.xml")]
            Message ProvidePolicyFile();
        }

     public System.ServiceModel.Channels.Message ProvidePolicyFile()
            {
                 FileStream filestream = File.Open(@"ClientAccessPolicy.xml", FileMode.Open);
                // Either specify ClientAcessPolicy.xml file path properly
                // or put that in /Bin folder of the console application
                XmlReader reader = XmlReader.Create(filestream);
                System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, "", reader);
               return result;
            }

    5 clientaccesspolicy.xml

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="*">
            <domain uri="*"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>

    6  App.Config

    <configuration>
        <system.serviceModel>
          <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="WCFBase.WCFServiceBehavior">
                        <serviceMetadata httpGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
                </serviceBehaviors>
              <endpointBehaviors>
                <behavior name="DomainServiceBehavior">
                  <webHttp/>
                </behavior>
              </endpointBehaviors>
            </behaviors>
         
          <!--
          <bindings>
            <basicHttpBinding>
              <binding name="NoneSecurity"
       maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
                <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
                <security mode="None"/>
              </binding>
            </basicHttpBinding>
          </bindings>
          -->
         
            <services>
                <service behaviorConfiguration="WCFBase.WCFServiceBehavior" name="WCFBase.WCFService">
                    <endpoint address="" binding="basicHttpBinding" contract="WCFBase.IWCFService">
                        <identity>
                            <dns value="localhost" />
                        </identity>
                    </endpoint>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                    <host>
                        <baseAddresses>
                            <add baseAddress="http://localhost:9090/WCFService/" />
                        </baseAddresses>
                    </host>
                </service>
                <service name="WCFBase.DomainService">
                    <endpoint address="" behaviorConfiguration="DomainServiceBehavior"
                        binding="webHttpBinding" contract="WCFBase.IDomainService" />
                    <host>
                        <baseAddresses>
                            <add baseAddress="http://localhost:9090/" />
                        </baseAddresses>
                    </host>
                </service>
            </services>
         
        </system.serviceModel>
     
    </configuration>
    7 Host

     static void Main(string[] args)
            {
                ServiceHost host = new ServiceHost(typeof(WCFService));
                host.Open();

                ServiceHost crossDomainserviceHost = new ServiceHost(typeof(DomainService));
                crossDomainserviceHost.Open();

                Console.WriteLine("I'am Here.");
                Console.ReadKey();
                host.Close();


            }

    8  添加服务引用

    9 实现 

     private void button1_Click(object sender, RoutedEventArgs e)
            {
                ServiceReference2.WCFServiceClient client = new ServiceReference2.WCFServiceClient();
                client.DoDevideCompleted += new EventHandler<ServiceReference2.DoDevideCompletedEventArgs>(client_DoDevideCompleted);
                string errorMessage = String.Empty;
                client.DoDevideAsync(5, 0,errorMessage);
             
            }
          
            void client_DoDevideCompleted(object sender, ServiceReference2.DoDevideCompletedEventArgs e)
            {
                MessageBox.Show(e.errorMessage);
            }

            private void button2_Click(object sender, RoutedEventArgs e)
            {
                ServiceReference1.WCFServiceClient client = new ServiceReference1.WCFServiceClient();
                client.DevideCompleted += new EventHandler<ServiceReference1.DevideCompletedEventArgs>(client_DevideCompleted);
                Exception ex = new Exception();
                client.DevideAsync(5, 0, ex);
            }

            void client_DevideCompleted(object sender, ServiceReference1.DevideCompletedEventArgs e)
            {
                MessageBox.Show(e.error.Message);
            }

  • 相关阅读:
    Logistic Regression
    如何把日期格式化为指定格式?
    JavaScript的自调用函数
    elementui 在原生方法参数里,添加参数
    原生js实现随着滚动条滚动,导航会自动切换的效果
    微信小程序-canvas绘制文字实现自动换行
    visual studio 和 sql server 的激活密钥序列号
    跨多个服务器访问不同数据库的表的方法
    数据库面试中常问的几个问题
    聚集索引和非聚集索引的区别
  • 原文地址:https://www.cnblogs.com/cpcpc/p/2123087.html
Copyright © 2011-2022 走看看