1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[C#] bind self hosted wcf service to url

Dieses Thema im Forum ".NET Web und Kommunikation" wurde erstellt von Computerfreak90, 9. November 2013.

  1. Computerfreak90

    Computerfreak90 Mitglied

    Hallo,
    ich habe einen WCF Service und will diesen in einer Application (Forms) laufen lassen.
    Ich bin jetzt so wit, das ich ihn über localhot:8080/Service erreichen kann.
    Nun will ich den Service aber an eine anddere URL binden als an dem Localhost.
    soetwas wie "http://wcf/Service1" funktioniert das?
    und der service soll nur im localen netz verfügbar sein, aber ich glaube das ist er auch standartmäßig.
    Meine Bind funktion:
    PHP:
    1.   Uri baseAddress = new Uri("http://localhost:8080/Service1/");
    2.  
    3.             BasicHttpBinding binding = new BasicHttpBinding();
    4.  
    5.             myServiceHost = new ServiceHost(typeof(WCFService), baseAddress);
    6.             myServiceHost.AddServiceEndpoint(typeof(I_ServiceContract), binding, baseAddress);
    7.  
    8.             myServiceHost.Open();
    und so hatte ich es mir vorgestellt:

    PHP:
    1.   Uri baseAddress = new Uri("http://wcf/Service1/");
    2.  
    3.             BasicHttpBinding binding = new BasicHttpBinding();
    4.  
    5.             myServiceHost = new ServiceHost(typeof(WCFService), baseAddress);
    6.             myServiceHost.AddServiceEndpoint(typeof(I_ServiceContract), binding, baseAddress);
    7.  
    8.             myServiceHost.Open();
    Kann das C#oder geht das überhaupt nicht?

    Danke im Vorraus
     
  2. ksk

    ksk Erfahrenes Mitglied

    ... sollte schon möglich sein.
    Was mir bei der URI ("http://wcf/Service1") auffält ist das nicht auf den Service verwiesen wird ("http://wcf/Service1/Service1.svc").
    Falls "Service1" doch der Servicename ist dann gehört die Extension dazu.
    Keine Ahnung ob du den unteren Code benötigen wirst aber du kannst beim Binding
    sicherheitshalber noch die MaxReceivedMessageSize und maxBuffersize auf "2147483647" und
    den Binding-Security auf Transport stellen.
    Code (Text):
    1.   binding.MaxBufferSize = 2147483647;
    2.   binding.MaxReceivedMessageSize = 2147483647;
    3.  
    4.   BasicHttpSecurity bhtts = new BasicHttpSecurity();
    5.   bhtts.Transport = new HttpTransportSecurity();
    6.   binding.Security = bhtts;
    Zusätzlich muss am IIS Server auch Einstellung getroffen werden.
    WCF auf IIS 6 ist sehr schwer einzurichten auf IIS 7 jedoch einfach.

    Du brauchst einen Application Pool mit folgenden Einstellungen
    v4.0,
    Managed Pipline Mode: Integrated,
    Identity: ApplicationPoolIdentity

    Wenns nur intern verwendet werden soll dann Anonymous deaktivieren und Windows authentication aktivieren.
    Und ganz wichtig die Berechtigung auf File-Ebene.
    Im Verzeichnis wo der Service bzw. das Projekt liegt muss der IIS_User oder ähnl. berechtigt sein (Lesen/Ausführen).
    Des Weiteren muss der Service auf dem IIS Registriert werden. Siehe
    http://msdn.microsoft.com/en-us/library/ms732012(v=vs.110).aspx
    http://msdn.microsoft.com/en-us/library/aa751792(v=vs.110).aspx
    auf Deutsch
    http://msdn.microsoft.com/de-de/library/aa751792(v=vs.110).aspx

    Ich glaube wenn diese Schritte erledigt sind dann sollte dir nichts im Wege stehen.
    Hoffe das hilft dir weiter und gib bescheid ob das geklappt hat.

    Lg
    ksk