Frage

habe ich einen Proxy eines Web Service mit Visual Studio 2008, und es erstellt für mich den folgenden Eintrag in der app.config:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyNameHandlerSoapBinding" 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="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://www.***/***/***"
              binding="basicHttpBinding" bindingConfiguration="MyNameHandlerSoapBinding"
              contract="***.MyNameHandler" name="MyName">
          </endpoint>
        </client>
    </system.serviceModel>

Der Webservice ist, hat Benutzername / Passwort-Authentifizierung, damit ich es hier irgendwo hinzufügen müssen.

Ich bin ein bisschen im Meer der WCF Dokumentation verloren, ich glaube, ich habe von Basichttpbinding zu wsHttpBinding oder custom ändern zu können, die Authentifizierungs-Elemente hinzuzufügen, aber ich verstehe es nicht wirklich. Könnte jemand eine schnelle Spitze oder einen nützlichen Link geben, der sagt, wie dies zu tun?

EDIT:

Ich habe die Sicherheitsabteilung an:

<security mode="Transport">
    <transport clientCredentialType="Basic" proxyCredentialType="None"
         realm="" />
</security>

und im Code hinzugefügt:

ws.ClientCredentials.UserName.UserName = "";
ws.ClientCredentials.UserName.Password = "";

Nun scheint es, könnte es die Anmeldeinformationen verwenden, aber es gibt mir den Fehler:

das bereitgestellte URI-Schema 'http' ist ungültig URI erwartet 'https'

Ich weiß nicht einmal, ob dies der richtige Weg zu gehen ...

War es hilfreich?

Lösung

poste ich hier die Lösung für zukünftige Leser:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="MyHandlerSoapBinding" 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="TransportCredentialOnly">
            <transport clientCredentialType="Basic"  />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.***/***/***/MyHandler"
          binding="basicHttpBinding" bindingConfiguration="MyHandlerSoapBinding"
          contract="***.MyHandler" name="MyHandler">
      </endpoint>

    </client>
  </system.serviceModel>

Am Ende kann ich das Standard-Basichttpbinding verwenden. Der einzige Unterschied zu dem Code in der Frage gepostet ist die Sicherheit node .

Beachten Sie auch die mode = "TransportCredentialOnly" Option, diese können Sie Benutzername / Passwort http statt https senden. Dies ist notwendig, für Testumgebungen als die, die ich bin mit. Später offensichtlich werden Sie https es vorziehen, Ihre Anmeldeinformationen zu senden.

Danach in Code Sie Ihren Benutzername / Passwort eingeben:

var ws = new ***.MyHandlerClient("MyHandler");
ws.ClientCredentials.UserName.UserName = "myUsername";
ws.ClientCredentials.UserName.Password = "myPassword";
var result = ws.executeMyMethod();
scroll top