WCF-Konfiguration AddressFilter mismatch

Bin ich mit WCF-Konfiguration sorgen. Ich habe einen WCF-Webservice, ich möchte in der Lage sein, um den Zugriff über einen web-browser mit GET-Parameter (und evtl. in PHP mit simplexml_load_file()). Mein Visual Studio-Lösung ist als WCF Service Library-Projekt mit einer Schnittstelle (wo der service definiert ist), eine Klasse (wo der service implementiert ist, und eine app.config (die gab es standardmäßig). Ich habe auch ein WCF-Dienst-Projekt enthält ein .svc-Datei (die Punkte auf meine Klasse) und ein web.config. Mein Service-Schnittstelle ausgelegt ist wie diese:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using RTXEngineLib.externalLibrary;
namespace RTXEngineLib {
    [ServiceContract(Name = "RTXEngine", Namespace = "")]
    public interface IRTXEngine {
        [OperationContract(Name = "GetCountryList"), WebGet(UriTemplate = "/GetCountryList/", ResponseFormat = WebMessageFormat.Xml)]
        List<Country> GetCountryList();
        [OperationContract(Name = "GetRegions"), WebGet(UriTemplate = "/GetRegions/?countryID={countryID}", ResponseFormat = WebMessageFormat.Xml)]
        List<Region> GetRegions(int countryID);
        [OperationContract(Name = "GetExchangeAvailability"), WebGet(UriTemplate = "/GetExchangeAvailability/?countryID={countryID}&month={month}&year={year}&regionID={regionID}&resortID={resortID}", ResponseFormat = WebMessageFormat.Xml)]
        AvailabilityList GetExchangeAvailability(int countryID, String month, int year, String regionID = "?", String resortID = "");
        [OperationContract(Name = "GetResortsForDate"), WebGet(UriTemplate = "/GetResortsForDate/?month={month}&year={year}", ResponseFormat = WebMessageFormat.Xml)]
        List<AvailabilityList> GetResortsForDate(String month, int year);
        [OperationContract(Name = "GetRegionLists"), WebGet(UriTemplate = "/GetRegionLists/", ResponseFormat = WebMessageFormat.Xml)]
        List<RegionList> GetRegionLists();
        [OperationContract(Name = "GetRegionListCacheState"), WebGet(UriTemplate = "/GetRegionListCacheState/", ResponseFormat = WebMessageFormat.Xml)]
        Boolean GetRegionListCacheState();
    }
    [DataContract(Namespace = "")]
    public class LoginRequestResponse {
        [DataMember]
        public Boolean Success { get; set; }
        [DataMember]
        public AccountStanding AccountStanding { get; set; }
        [DataMember]
        public double FTXBalance { get; set; }
        [DataMember]
        public List<User> Users { get; set; }
        [DataMember]
        public List<ContractData> Contracts { get; set; }
    }
    [DataContract(Namespace = "")]
    public enum AccountType {
        [DataMember]
        NonAuthenticatedAccount,
        [DataMember]
        AC,
        [DataMember]
        PT,
        [DataMember]
        Wks
    }
    [DataContract(Namespace = "")]
    public enum AccountStanding {
        [DataMember]
        NotAuthenticated,
        [DataMember]
        Good,
        [DataMember]
        Mixed,
        [DataMember]
        Delinquent
    }
    [DataContract(Namespace = "")]
    public struct RegionList {
        [DataMember]
        public String CountryName { get; set; }
        [DataMember]
        public String CountryID { get; set; }
        [DataMember]
        public List<Region> Regions { get; set; }
    }
    [DataContract(Namespace = "")]
    public struct Country {
        [DataMember]
        public String CountryName { get; set; }
        [DataMember]
        public String ID { get; set; }
    }
    [DataContract(Namespace = "")]
    public struct Region {
        [DataMember]
        public String RegionName { get; set; }
        [DataMember]
        public String ID { get; set; }
    }
    [DataContract(Namespace = "")]
    public struct User {
        [DataMember]
        public String FirstName { get; set; }
        [DataMember]
        public String LastName { get; set; }
        [DataMember]
        public String Address { get; set; }
        [DataMember]
        public String City { get; set; }
        [DataMember]
        public String State { get; set; }
        [DataMember]
        public String Zip { get; set; }
        [DataMember]
        public String CountryOfResidence { get; set; }
        [DataMember]
        public String PhoneNumber { get; set; }
    }
    [DataContract(Namespace = "")]
    public struct ContractData {
        [DataMember]
        public String ContractID { get; set; }
        [DataMember]
        public AccountType AccountType { get; set; }
        [DataMember]
        public AccountStanding AccountStanding { get; set; }
        [DataMember]
        public String AvailablePoints { get; set; }
        [DataMember]
        public String UnavailablePoints { get; set; }
        [DataMember]
        public String Usage { get; set; }
    }
    [DataContract(Namespace = "")]
    public struct PointsData {
        [DataMember]
        public String ContractID { get; set; }
    }
    [DataContract(Namespace = "")]
    public class GlobalAppCache {
        [DataMember]
        public static DateTime RegionListsLastUpdate { get; set; }
        [DataMember]
        public static List<RegionList> CachedRegionLists { get; set; }
    }
}

Und meine App.config für die Bibliothek sieht wie folgt aus:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5555555555555555">
      <section name="RTXEngineLib.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service name="RTXEngineLib.RTXEngineLib">
        <endpoint address="" binding="wsHttpBinding" contract="RTXEngineLib.IRTXEngineLib">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/RTXEngineLib/RTXEngineLib/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- 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="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <applicationSettings>
    <RTXEngineLib.Properties.Settings>
      <setting name="RTXEngineLib_externalLibrary" serializeAs="String">
        <value>http://externalLibrary.com/websvcs/externalLibrary.asmx</value>
      </setting>
    </RTXEngineLib.Properties.Settings>
  </applicationSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Und dann meine Web.config ist wie folgt:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="Web" sendTimeout="00:03:00" maxBufferSize="131072"
          maxReceivedMessageSize="131072" />
      </webHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Basic" name="RTXEngineLib.RTXEngineLib">
        <endpoint address="http://devrtxengine.telemark/RTXService.svc"
          binding="webHttpBinding" bindingConfiguration="Web" name="Basic"
          contract="RTXEngineLib.IRTXEngine" listenUri="http://devrtxengine.myserver/RTXService.svc" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="Basic">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
        <behavior name="Web">
          <serviceMetadata httpGetEnabled="true" httpGetBinding="webHttpBinding"
            httpGetBindingConfiguration="" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>  
</configuration>

Wenn ich Versuch zu laufen, mein service-über http://devrtxengine.myserver/RTXService.svc/GetCountryList ich am Ende mit der folgenden Fehlermeldung:

<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none">
<Code>
<Value>Sender</Value>
<Subcode>
<Value xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:DestinationUnreachable</Value>
</Subcode>
</Code>
<Reason>
<Text xml:lang="en-US">
The message with To 'http://devrtxengine.telemark/RTXService.svc/GetCountryList' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree.
</Text>
</Reason>
</Fault>

Ich vermute, dass es irgendeine Art von Diskrepanz zwischen meiner App.config und meine Web.config, aber jedes mal, wenn ich versuche, etwas zu ändern in meinem Web.config breche ich meinen Dienst noch mehr, als es schon gebrochen. Hat jemand mit mehr WCF-Erfahrung haben Sie irgendwelche Ratschläge?

  • Die app.config für den service der Bibliothek ist irrelevant - es wird nicht verwendet werden. Die Web -.config für den WCF-Dienst ist die config-Datei, die verwendet werden von Ihrer Bibliothek. Wie rufst du den service an? Sie haben einen separaten client, verwenden Sie ein test-tool, etc.?
  • Ich rufe es durch die Eingabe der URL in meinem browser (das ist, wie ich brauche, um service in der Lage zu arbeiten, wenn abgeschlossen), wird wie gezeigt, in der winzigen Absatz, kurz bevor die Fehlermeldung. http://devrtxengine.myserver/RTXService.svc/GetCountryList
  • Ich bemerkte, dass die Endpunkt-Adresse wurde devrtxengine.telemark, aber Sie haben listenUri als devrtxengine.myserver. Nicht sicher, ob das ein Tippfehler, oder wenn Sie es würde einen Unterschied machen. Sie können auch versuchen, hinzufügen der "WebHttpBinding" Verhalten - siehe Lösung Konfigurations-Fehler im WCF-AddressFilter Mismatch für ein Beispiel.
  • den link den du gepostet wies mich in die richtige Richtung. Ich brauchte Sie zum hinzufügen eines Service-Verhalten und eine Endpoint-Bahaviour (beide) für webHttp, hatte ich bisher nur konfiguriert der Service-Verhalten. Wenn Ihr nichts dagegen posting eine Antwort mit dem link, den Sie enthalten, ich wäre mehr als glücklich, es zu akzeptieren. Danke!
  • posted. Froh, dass es Ihnen geholfen.
  • Finden Sie diese Artikel, um wissen über die Konfiguration mismatch(falls vorhanden) in Ihrer Anwendung. robbagby.com/rest/...
  • Für die Informationen, ich lief über die gleiche Frage, aber mit SoapUI (für Konsum) und diesen Artikel schnell gab die Antwort : javiercrespoalvez.com/2010/09/...

Schreibe einen Kommentar