Announcement

Collapse
No announcement yet.

Erstellung vom COM+ Komponente, die einen WebService-Aufruf macht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Erstellung vom COM+ Komponente, die einen WebService-Aufruf macht

    Ich hatte die Aufgabe eine COM+-Komponente zu erstellen, die einen Webservice aufruf macht. Die Komponente sollte dann aus dem Powerbuilder heraus angesprochen werden.

    Dabei war ich mit folgendem Problem konfrontiert.

    1. Wenn ein Service Reference erstellt wird, werden ein Teil der Verbindungsinformationen in die app.config abgelet. Aus der Entwicklungumgebung heraus funktioniert die Verbindung zum Webservice, aber sobald die COM-DLL aus einem anderen Prozeß heraus instanziiert wird erhält man folgende Fehlermeldung.

    „Es wurde kein Endpunktelement mit dem Namen "InfoPort" und dem Vertrag "SP.InfoPort" im ServiceModel-Clientkonfigurationsabschnitt gefunden. Dies kann folgende Ursachen haben: Für die Anwendung wurde keine Konfigurationsdatei gefunden, oder im Clientelement wurde kein Endpunktelement gefunden, das diesem Namen entsprach“.

    Der Grund hierfür ist, das Die DLL versucht in den Configurationsdaten des aufrufenden Prozesses die entsprechenden Verbindunginformationen zu bekommen. Das kann man dan umgehen, in dem man das ganze kodiert.

    BasicHttpBinding pBasicHttpBinding = null;
    if (IsHttpsMode(pWebReference))
    {
    pBasicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
    }
    else
    {
    pBasicHttpBinding = new BasicHttpBinding();
    }

    pBasicHttpBinding.Name = "InfoBinding";
    pBasicHttpBinding.CloseTimeout = new TimeSpan(0, 1, 0);
    pBasicHttpBinding.OpenTimeout = new TimeSpan(0, 1, 0);
    pBasicHttpBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
    pBasicHttpBinding.SendTimeout = new TimeSpan(0, 1, 0);
    pBasicHttpBinding.AllowCookies = true;
    pBasicHttpBinding.BypassProxyOnLocal = false;
    pBasicHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
    pBasicHttpBinding.MaxBufferSize = 65536;
    pBasicHttpBinding.MaxBufferPoolSize = 524288;
    pBasicHttpBinding.MaxReceivedMessageSize = 65536;
    pBasicHttpBinding.MessageEncoding = WSMessageEncoding.Text;
    pBasicHttpBinding.TextEncoding = System.Text.Encoding.UTF8;
    pBasicHttpBinding.TransferMode = TransferMode.Buffered;
    pBasicHttpBinding.UseDefaultWebProxy = true;

    pBasicHttpBinding.ReaderQuotas = new XmlDictionaryReaderQuotas();
    pBasicHttpBinding.ReaderQuotas.MaxDepth = 12;
    pBasicHttpBinding.ReaderQuotas.MaxStringContentLen gth = 8192;
    pBasicHttpBinding.ReaderQuotas.MaxArrayLength = 16384;
    pBasicHttpBinding.ReaderQuotas.MaxBytesPerRead = 4096;
    pBasicHttpBinding.ReaderQuotas.MaxNameTableCharCou nt = 16384;

    EndpointAddress pEndpointAddress = new EndpointAddress(pWebReference);
    mInfoPortClient = new InfoPortClient(pBasicHttpBinding, pEndpointAddress);


    2. Konnte keine https-Verbindung aufbauen. Dabei habe ich immer folgende Fehlermeldung bekommen:

    "Es wird ein https Schema übergeben, erwartet wird ein http Schema.

    Das Problem kann mit folgendem Aufruf gelöst werden:

    BasicHttpBinding pBasicHttpBinding = null;
    if (IsHttpsMode(pWebReference)) //Eigene Methode, die https feststellt
    {
    pBasicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
    }
    else
    {
    pBasicHttpBinding = new BasicHttpBinding();
    }

    Ich hoffe, dass das hier einigen nutzen wird, die ähnliche Probleme haben.
Working...
X