• Translate this app.config xml to code? (WCF) z


    http://stackoverflow.com/questions/730693/translate-this-app-config-xml-to-code-wcf

    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="MyService" 
                     closeTimeout="00:01:00"
                     openTimeout="00:01:00" 
                     receiveTimeout="00:10:00" 
                     sendTimeout="00:01:00"
                     allowCookies="false" 
                     bypassProxyOnLocal="false" 
                     hostNameComparisonMode="StrongWildcard"
                     maxBufferSize="65536" 
                     maxBufferPoolSize="524288" 
                     maxReceivedMessageSize="65536"
                     messageEncoding="Text" 
                     textEncoding="utf-8" 
                     transferMode="Buffered"
                     useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" 
                              maxStringContentLength="8192" 
                              maxArrayLength="16384"
                              maxBytesPerRead="4096" 
                              maxNameTableCharCount="16384" />
                <security mode="TransportWithMessageCredential">
                    <transport clientCredentialType="None" 
                               proxyCredentialType="None" 
                               realm="" />
                    <message clientCredentialType="UserName" 
                             algorithmSuite="Default" />
                </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="https://server.com/service/MyService.asmx"
          binding="basicHttpBinding" bindingConfiguration="MyService"
          contract="MyService.MyServiceInterface"
          name="MyService" />
        </client>
    </system.serviceModel>
    

      改为

    BasicHttpBinding binding = new BasicHttpBinding();
    Uri endpointAddress = new Uri("https://server.com/service/MyService.asmx");
    
    ChannelFactory<MyService.MyServiceInterface> factory = new ChannelFactory<MyService.MyServiceInterface>(binding, endpointAddress);
    
    MyService.MyServiceInterface proxy = factory.CreateChannel();
    

     完善为

    BasicHttpBinding binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
            Uri endpointAddress = new Uri("https://server.com/Service.asmx");
    
            ChannelFactory<MyService.MyServiceInterface> factory = new ChannelFactory<MyService.MyServiceInterface>(binding, endpointAddress.ToString());
            factory.Credentials.UserName.UserName = "username";
            factory.Credentials.UserName.Password = "password";
    
            MyService.MyServiceInterface client = factory.CreateChannel();
    
            // make use of client to call web service here...
    

     示例2:

    <bindings>
        <customBinding>
            <binding name="lbinding">
                <security  authenticationMode="UserNameOverTransport" 
                    messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11" 
                    securityHeaderLayout="Strict" 
                    includeTimestamp="false"
                    requireDerivedKeys="true" 
                    keyEntropyMode="ServerEntropy">
                </security>
                <textMessageEncoding messageVersion="Soap11" />
                <httpsTransport authenticationScheme ="Negotiate" requireClientCertificate ="false" realm =""/>
            </binding>
        </customBinding>
    </bindings>
    

     改为:

    Uri epUri = new Uri(_serviceUri);
    CustomBinding binding = new CustomBinding();
    SecurityBindingElement sbe = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
    sbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11;        
    sbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
    sbe.IncludeTimestamp = false;
    sbe.SetKeyDerivation(true);
    sbe.KeyEntropyMode = System.ServiceModel.Security.SecurityKeyEntropyMode.ServerEntropy;
    binding.Elements.Add(sbe);
    binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, System.Text.Encoding.UTF8));
    binding.Elements.Add(new HttpsTransportBindingElement());
    EndpointAddress endPoint = new EndpointAddress(epUri);
    

     辅助函数:

    public static TResult UseService<TChannel, TResult>(string url,
                                                        EndpointIdentity identity,
                                                        NetworkCredential credential,
                                                        Func<TChannel, TResult> acc)
    {
        var binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
        var endPointAddress = new EndpointAddress(new Uri(url), identity,
                                                  new AddressHeaderCollection());
        var factory = new ChannelFactory<T>(binding, address);
        var loginCredentials = new ClientCredentials();
        loginCredentials.Windows.ClientCredential = credentials;
    
        foreach (var cred in factory.Endpoint.EndpointBehaviors.Where(b => b is ClientCredentials).ToArray())
            factory.Endpoint.EndpointBehaviors.Remove(cred);
    
        factory.Endpoint.EndpointBehaviors.Add(loginCredentials);
        TChannel channel = factory.CreateChannel();
        bool error = true;
        try
        {
            TResult result = acc(channel);
            ((IClientChannel)channel).Close();
            error = false;
            factory.Close();
            return result;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return default(TResult);
        }
        finally
        {
            if (error)
                ((IClientChannel)channel).Abort();
        }
    }
    

     调用方法:

    usage

    NameSpace.UseService("http://server/XRMDeployment/2011/Deployment.svc",
                         Identity,
                         Credentials,
    (IOrganizationService context) =>
    { 
       ... your code here ...
       return true;
    });
    示例3:
    //end point setup
    System.ServiceModel.EndpointAddress EndPoint = new System.ServiceModel.EndpointAddress("http://Domain:port/Class/Method");
    System.ServiceModel.EndpointIdentity EndpointIdentity = default(System.ServiceModel.EndpointIdentity);
    
    //binding setup
    System.ServiceModel.BasicHttpBinding binding = default(System.ServiceModel.BasicHttpBinding);
    
    binding.TransferMode = TransferMode.Streamed;
    //add settings
    binding.MaxReceivedMessageSize = int.MaxValue;
    binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
    binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
    binding.ReaderQuotas.MaxDepth = int.MaxValue;
    binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
    binding.MaxReceivedMessageSize = int.MaxValue;
    binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
    
    binding.MessageEncoding = WSMessageEncoding.Text;
    binding.TextEncoding = System.Text.Encoding.UTF8;
    binding.MaxBufferSize = int.MaxValue;
    binding.MaxBufferPoolSize = int.MaxValue;
    binding.MaxReceivedMessageSize = int.MaxValue;
    binding.SendTimeout = new TimeSpan(0, 10, 0);
    binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
    
    //setup for custom binding
    System.ServiceModel.Channels.CustomBinding CustomBinding = new System.ServiceModel.Channels.CustomBinding(binding);
    

    What I do to configure my contract:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0"), System.ServiceModel.ServiceContractAttribute(Namespace = "http://MyNameSpace", ConfigurationName = "IHostInterface")]
    public interface IHostInterface
    {
    }
    

  • 相关阅读:
    软件工程实践个人编程作业
    实验 2:Mininet 实验——拓扑的命令脚本生成
    软工实践个人总结
    第08组 每周小结 (3/3)
    第08组 每周小结 (2/3)
    第08组 每周小结 (1/3)
    第08组 Beta冲刺 总结
    第08组 Beta冲刺 (5/5)
    第08组 Beta冲刺 (4/5)
    第08组 Beta冲刺 (3/5)
  • 原文地址:https://www.cnblogs.com/zeroone/p/5187134.html
Copyright © 2020-2023  润新知