Konvertieren Sie die Konfiguration des Webdienstes in Code

Ich habe einen Client für den SOAP-Dienst in einer Konsolenanwendung. Ich muss den Dienstclient auf Sharepoint 2010 verschieben. Ich möchte keine Konfigurationsdateien und andere Sharepoint-bezogene Dinge bereitstellen. Daher habe ich mich entschieden, Bindungsinformationen nur fest zu codieren konfigurierbare Option ist URL. Aber ich hatte einige Probleme damit. Ich habe eine Konfiguration:

    <system.serviceModel>
<bindings>
  <customBinding>
    <binding name="SI_PMProjectMaintain_SOUTBinding">
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap11" writeEncoding="utf-8">
        <readerQuotas maxDepth="10000000" maxStringContentLength="10000000"
          maxArrayLength="67108864" maxBytesPerRead="65536" maxNameTableCharCount="100000" />
      </textMessageEncoding>
      <httpTransport authenticationScheme="Basic" bypassProxyOnLocal="false"
        hostNameComparisonMode="StrongWildcard" keepAliveEnabled="false"
        proxyAuthenticationScheme="Basic" realm="XISOAPApps" useDefaultWebProxy="true" />
    </binding>
  </customBinding>
</bindings>
<client>
  <endpoint address="http://url/XISOAPAdapter/MessageServlet?senderParty=&amp;senderService=Param1&amp;receiverParty=&amp;receiverService=&amp;interface=interface&amp;interfaceNamespace=url"
    binding="customBinding" bindingConfiguration="SI_PMProjectMaintain_SOUTBinding"
    contract="PmProjectMaintain.SI_PMProjectMaintain_SOUT" name="HTTP_Port" />
</client>

Auch ich habe einen Code:

    var service = new ServiceClient();
    service.ClientCredentials.Windows.ClientCredential = new NetworkCredential("user", "password");
    service.ClientCredentials.UserName.UserName = "user";
    service.ClientCredentials.UserName.Password = "password";

    var resp = service.Operation();
    Console.WriteLine(resp.Response);

Es funktioniert wie erwartet. Jetzt möchte ich xml config loswerden und komplett in den Code verschieben:

public class CustomHttpTransportBinding : CustomBinding
{
    public CustomHttpTransportBinding()
    {
    }

    public override BindingElementCollection CreateBindingElements()
    {
        var result = new BindingElementCollection();
        result.Add(new TextMessageEncodingBindingElement
        {
            MaxReadPoolSize = 64,
            MaxWritePoolSize = 16,
            MessageVersion = MessageVersion.Soap11,
            WriteEncoding = Encoding.UTF8,

            //ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
            //{
            //    MaxDepth = 10000000,
            //    MaxStringContentLength = 10000000,
            //    MaxArrayLength = 67108864,
            //    MaxBytesPerRead = 65536,
            //    MaxNameTableCharCount = 100000
            //}
        });

        result.Add(new HttpTransportBindingElement
        {
            AuthenticationScheme = AuthenticationSchemes.Basic,
            BypassProxyOnLocal = false,
            HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard,
            KeepAliveEnabled = false,
            ProxyAuthenticationScheme = AuthenticationSchemes.Basic,
            Realm = "XISOAPApps",
            UseDefaultWebProxy = true
        });

        return result;
    }
}

Und ich benutze es so:

    var service = new ServiceClient(new CustomHttpTransportBinding(), new EndpointAddress(url));
    service.ClientCredentials.Windows.ClientCredential = new NetworkCredential("user", "password");
    service.ClientCredentials.UserName.UserName = "user";
    service.ClientCredentials.UserName.Password = "password";

    var resp = service.Operation();
    Console.WriteLine(resp.Response);

It erreicht den Server, löst aber eine Ausnahme aus ("Server Error"), sodass ich glaube, dass etwas mit meiner Konfiguration nicht stimmt. Ich kann die Leserquoten auch nicht angeben. Ich habe versucht, @ zu ladconfiguration from string, aber es hat bei mir nicht geklappt, gleicher Fehler. Confi Es scheint, dass ich keine benutzerdefinierten Bindungen von XML in Code in .net 3.5 konvertieren kann. Kann jemand meinen Code einsehen und bestätigen? Gibt es andere Möglichkeiten, einen Service-Client mit benutzerdefinierter Codebindung zu haben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage