"EndPoint Nicht Gefunden" Fehler mit WCF service-Bereitstellung auf SharePoint 2010-Website

Ich versuche zu nutzen, die aus der in meinem Lösungen (das erfordert eine ältere version der Bibliothek, da alle neueren erfordern .NET Framework 4.0) und leider Ich kann nicht mit einem Seite-Methode in einem UserControl, nur in einer tatsächlichen Seite. Daher bleibt mir nur die eine option, die ist, eine Methode zu verwenden, die aus einem eigentlichen web-service. Das problem ist, dass ich kann nicht scheinen, um herauszufinden, wie die korrekte Bereitstellung des service und konfigurieren der web.config. Wenn ich beim anzeigen der Metadaten im browser bekomme ich eine Fehlermeldung "der Endpunkt nicht gefunden". Jedoch, wenn ich versuche, geben Sie die URL mit dem Namen einer Methode an die URL angehängt und es findet tatsächlich UND führt die Methode der Rückkehr von JSON Daten -was natürlich bedeutet, dass Sie es finden können meinen service. Ich kann auch jQuery verwenden, nennen Sie meinen service und senden Sie den JSON-Daten -aber ich weiß nicht verwenden möchten jQuery für dieses Projekt und würde lieber einfach halten, alles rein in C#.

Was ich wissen möchte ist, warum kann ich nicht bekommen, die "ziemlich Metadaten-Informationen", um die Anzeige im browser so bekomme ich die "warm fuzzy" und erlauben Sie die richtige Entdeckung der service von anderen Anwendungen, wie es sein sollte?

Ich dreifach geprüft das web.config und ich haben beide den Endpunkt metadataExchange, ebenso wie die, die meine Referenzen service ist eingetragen und ich habe httpGetEnabled auf "true" gesetzt. Ich habe versucht mit svcutil /t:Metadaten und richtete es auf meinen Dienst, aber ich bekomme mehrere Fehler, die erste erzählte mir, dass Sie können nicht erhalten Sie die Metadaten, die zweite, dass die Metadaten enthalten einen Verweis, der nicht aufgelöst werden, und die Dritte ist eine HTTP-Fehlermeldung, die sagt, dass das HTML-Dokument enthält keine Webdienst-discovery-Informationen. Auch wenn ich meinen svc-Datei in das gleiche ISAPI-Verzeichnis als den OOTB SharePoint services und können die Generierung der XSD-Dateien, die für diese Leistungen, aber nicht für meins.

Hier ist, was meine aktuellen web.config-Datei sieht folgendermaßen aus...

<?xml version="1.0"?>
 <configuration>
  <system.web>
   <compilation debug="true" />
    <identity impersonate="true"/>
  </system.web>
 <system.serviceModel>
 <!-- we need this to enable session -->
 <client>
 </client>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
 <behaviors>
  <endpointBehaviors>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="metadataSupportBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true" httpGetUrl="http://myserver/sites/mysitecollection/_vti_bin/WebServices/MyService.svc" policyVersion="Policy15"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceAuthorization impersonateCallerForAllOperations="false"/>
      <serviceCredentials>
        <windowsAuthentication includeWindowsGroups="true" />
      </serviceCredentials>
    </behavior>
    <behavior name="defaultBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
</bindings>
<services>
  <service behaviorConfiguration="metadataSupportBehavior" name="Sample.WebServices.MyService">
    <clear />
    <endpoint address="" binding="basicHttpBinding" contract="Sample.WebServices.IMyService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
      <identity>
        <certificateReference storeName="My" storeLocation="LocalMachine"
          x509FindType="FindBySubjectDistinguishedName" />
      </identity>
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://myserver/sites/mysitecollection/_vti_bin/WebServices/MyService.svc" />
      </baseAddresses>
    </host>
  </service>
</services>

Ich bin ein echter Verlust hier. Irgendwelche Gedanken?

Vielen Dank im vorraus!!!!!!

UPDATE #1: OK, ich fast habe es funktioniert. Ich meine, ich "technisch" hat aber nur im browser und mit ein paar Vorsichtsmaßnahmen.

Das erste, was ich Tat, war fügen Sie den folgenden code auf meiner Website.config-Datei:

  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>

Dann aktualisiert mein service-endpoint, um einen Verweis auf die neue Konfiguration so:

    <endpoint address="" binding="webHttpBinding" contract="Sample.WebServices.IMyService" behaviorConfiguration="webBehavior">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

Ich habe auch die Bindung von "basicHttpBinding" zu "webHttpBinding".

Nun zu den Einschränkungen...

  1. Kann ich es voll funktionsfähig und gibt ein XML-Antwort im browser aber NUR wenn ich den service ausführen im debug-Modus, was bedeutet, dass es wird gehostet in Visual Studio und IIS nicht, so dass es nicht wirklich zählen.

  2. Wenn ich nicht den service ausführen im debug-Modus bekomme ich eine Fehlermeldung, die sagt etwas zum Effekt von "Die Ausnahme Meldung 'Wert darf nicht null sein. Parameter name: source'".

Nachdem wir durch meinen code im debugger sehe ich den wirklichen Fehler, das ist:

Anforderung für die Berechtigung des Typs 'von IBM.Daten.DB2.DB2Permission, IBM.Daten.DB2, Version=9.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' ist fehlgeschlagen.

Die in Englisch einfach bedeutet, dass ich versuche, laden Sie eine 32-Bit-version von IBM.Daten.DB2 DLL in meine SharePoint-Website, die leider nur erlaubt 64-Bit-Assemblys.

Also meine erste Reaktion ist: "Ah ha!" das sollte einfach sein, Recht? Ich meine, entweder ich brauche zu finden, die eine 64-bit-version der DLL, oder einfach konfigurieren Sie den Anwendungspool, dass meine SharePoint-Website in IIS verwendet, um zu ermöglichen 32-bit-Assemblys geladen werden und dann sollte alles gut laufen! Bin ich nicht schlau? Aber KEINE sagt SharePoint! Nicht nur ich bin nicht gehen zu lassen, Sie tun, entweder von diesen Dingen* aber ich werde komplett Rendern Sie Ihre gesamte SharePoint-farm unbrauchbar für auch der Versuch der Umsetzung solch aberwitzige Lösungen!!!

So, jetzt wenn ich versuche zu navigieren, um alle Ressourcen innerhalb meiner SharePoint-farm bin ich mit grüßte dieser.

[NullReferenceException: Object reference not set to an instance of an object.]
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.get_ApplicationProperties() +134
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.get_PartitionIDs() +44
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.IsAvailable(SPServiceContext serviceContext) +329
   Microsoft.Office.Server.WebControls.MyLinksRibbon.get_PortalAvailable() +44
   Microsoft.Office.Server.WebControls.MyLinksRibbon.EnsureMySiteUrls() +60
   Microsoft.Office.Server.WebControls.MyLinksRibbon.get_PortalMySiteUrlAvailable() +15
   Microsoft.Office.Server.WebControls.MyLinksRibbon.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427

Selbst wenn ich das rückgängig alle meine änderungen an IIS App Pool, die DLLs, starten Sie IIS neu, starten meiner server-etc. nichts funktioniert. Ich bin einfach völlig verpeilt.

Guten Zeiten.

*Naja um fair zu sein, SharePoint nichts zu tun hatte mit der 64-Bit-IBM-Treiber nicht verfügbar, aber ich bin nur gonna davon ausgehen, dass selbst wenn es eine war, konnte ich techically Verwendung von SharePoint einen Weg finden würde, um mich zu bestrafen für den Versuch zu bekommen jede Arbeit.

UPDATE #2: OK, ich fixe das ganze "SharePoint-Website funktioniert nicht, was". Grundsätzlich ist die Anwendung Pools im Einsatz für alle SharePoint Verwandte Seiten schien sich verändert zu haben, um die 32-Bit-Anwendungen, einschließlich der SecurityTokenServiceApplication (kudos an den Typen vorbei, bei diese - site nicht nur mit dem gleichen problem, aber auch das posten der Lösung). Jetzt, während ich erinnere mich nicht mehr genau der Wert true für jede SharePoint-Anwendung im Zusammenhang mit Pool -, bin ich bereit mitzuspielen, und sagen, dass vielleicht in einem Akt der Verzweiflung vielleicht habe ich gerade gesagt, zur Hölle mit ihm und begann rücksichtslos die Konfigurationseinstellungen ändern können. Wissen Sie, denn das ist nur was für erfahrene Entwickler.

Jedenfalls...

Nun meine Zentraladministration-website ist wieder da und läuft, aber die UserProfileApplication service ist immer noch wackelig, und ich bin immer noch geneigt zu glauben, dass meine SecurityTokenServiceApplication service ist immer noch auf der fritz da bekomme ich eine Fehlermeldung (details versteckt natürlich, da das web.config konfiguriert ist, um genau das zu tun) erzählte mir, dass "Der server konnte die Verarbeitung der Anforderung aufgrund eines internen Fehler".

Infos Folgen...

UPDATE #3: OK, ich habe alles zurück zu seiner ursprünglichen form arbeiten. Ich bestätigte, dass nur damit die 32-Bit-Anwendungen für einen Anwendungspool verwendet eine SharePoint-Ressource effektiv updates all den anderen zu Folgen. Ich weiß, das für eine Tatsache, weil ich positiv nicht verändert, der Wert für JEDE SharePoint-Anwendung im Zusammenhang mit Bassin. Ich würde mich erinnert haben gehen durch sowas. Als es stellt sich heraus, all diese Anwendungspools mit der funky suchen "GUID-wie" Namen, die SharePoint-Dienste verwenden, wurden auch alle aktualisiert, damit die 32-Bit-Anwendungen ausgeführt werden, die ist, was die Ursache meiner Umgebung gehen alle screwy.

Darüber hinaus habe ich meine SecurityTokenService zur Anzeige der Metadaten im browser korrekt, indem Sie die folgenden Vorschläge hier. Obwohl Sie scheinen ein bisschen wie ein "hack", Sie sind klein und Reversible hacks also bin ich Spiel.

In kurzen, Bearbeiten Sie die config-Dateien für jede Dienstleistung etwa so:

  1. In der spStsActAsBinding verbindlich benennen Sie httpTransport zu httpsTransport.
  2. Hinzufügen allowInsecureTransport="true" und enableUnsecuredResponse="true", um die Bindung Sicherheit.
  3. Sicherzustellen, dass Sie definieren nur 1 binding-Konfiguration (zum Beispiel im Profil-Service finden Sie 2 bindungskonfiguration für den gleichen service, den jeder für http-und https-Protokoll).

Nachdem Sie das tun, sollten Sie in der Lage sein, um die "warmen Metadaten fuzzy", dass ich versuche, für den benutzerdefinierten WCF-service, den ich auf Arbeit bin.

So, jetzt brauche ich nur wieder zu reparieren, meine anfängliche problem war um die 32-Bit-version von IBM.Daten.DB2-DLL, die die Arbeit mit SharePoint 2010. Das einzige, was ich noch nicht versucht, ist das erstellen eines IIS-hosted service, der läuft VÖLLIG unabhängig von SharePoint. Dies würde mir erlauben, erstellen Sie einen separaten Anwendungspool aus, der KANN in der Tat ausführen von 32-Bit-Anwendungen, ohne dass SharePoint-flip-out -hoffentlich.

UPDATE #4: OK, also zu aller erst ich bin gehen zu sagen, Sie ignorieren meinen Rat oben über Herumspielen mit der SecurityTokenService. Sicher, dass Sie die "warm-Metadaten-fuzzy" mit den änderungen, aber dann werden Sie wahrscheinlich führen Sie Ihre SharePoint-Website zu brechen.

Also wie auch immer...ich habe jetzt eine Website erstellt, die völlig unabhängig ist von SharePoint, nutzt es die eigenen Application Pool, der so konfiguriert ist, dass 32-Bit-Anwendungen, so dass technisch sollte kümmern sich um alle meine Probleme. Nun, wenn ich versuche, eine Eingabe von text in meine textbox es nicht die "autocomplete" aber es ist die Netzwerk-Aktivität geschieht, denn ich sehe Sie in Fiddler. Das seltsame ist, dass es nur einmal passiert. Das heißt, wenn ich drücken Sie die Rücktaste, und geben etwas anderes keine zusätzlichen Aufrufe an den web service. Ich habe die Seite neu laden um es zu testen wieder raus. Die Fehlermeldung die ich bekomme, wenn es tut, rufen Sie die Methode "405 Methode Nicht Erlaubt". Jetzt ist meine Methode, Schnittstelle Signatur verwendet WebInvoke mit der Method-Eigenschaft auf "GET" ich habe gesagt, es sollte funktionieren und hat in der Vergangenheit bei der Herstellung REST-Aufrufe, die JSON-Daten, nur jetzt funktioniert es nicht. Oh, in der web-browser funktioniert es und ich sehe wunderbare XML-Ergebnisse der Methode zurückgegeben. Aber wenn ich versuche, die AutoCompleteExtender in meiner SharePoint-Benutzersteuerelement, um die Methode aufrufen (oder mit jedem anderen client) geht es nicht. Ich habe versucht, mit dem WebGet () - Attribut, aber dann nichts zurückgegeben wird, in der web-browser. Ich glaube, ich habe einen 415 Fehler.

UPDATE #5: ich fand einen anderen post, wo einige Kerl zu sein scheint mit der exakt gleichen problem, dass ich jetzt habe, nur der Unterschied ist, dass ich kann nicht die AutoVervollständigen zu arbeiten, selbst wenn ich den webservice in das gleiche Projekt. Ich habe auch versucht, die Vorschläge, die gemacht wurden, in seinem post, und Sie hat nicht funktioniert. Hier ist ein link zu der post für Interessierte.

Kannst du die genaue exception details, die Sie wieder aus dem Dienst. Auch habe ich bemerkt, dass Sie Ihre baseAddress bezieht sich nicht auf den _vti_bin Ordner für die SVC-Datei. Wo genau haben Sie bei der Bereitstellung Ihrer Servicecontract DLL und die .SVC-Datei ?
Guter Punkt. Ich hatte mit der Bearbeitung von web.config so viele Male (trial and error), um diese zu arbeiten, dass ich versehentlich ausgelassen die "_vti_bin" aus der baseAddress und GetUrl. Ich habe da legte Sie zurück, aber immer noch die gleichen Fehler.
Nur zu wiederholen, Wenn ich geben Sie die URL "myserver/sites/mysitecollection/_vti_bin/WebServices/..." in meinem web-browser, die es in der Tat zu finden, und führen Sie die web-Methode Rücksendung gültigen JSON-Daten.
Ich habe ein SharePoint-Projekt mit dem zugeordneten ISAPI-Ordner aus dem SharePoint-root-Ordner auf dem server (D. H. C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI). Mein Projekt nennt sich "WebServices" und als Ergebnis, erstellt Visual Studio einen Unterordner in dem zugeordneten ISAPI Ordner namens "WebServices" wo setzt es meine service-code und web.config-Datei.
Türschließer: das ist eine echte Frage, aber die eigentliche Frage ist "wie richte ich einen WCF-Dienst in SharePoint". Siehe google.com/search?q=deploy+custom+wcf+service+sharepoint+2010.

InformationsquelleAutor Ami Schreiber | 2013-03-01

Schreibe einen Kommentar