2013-07-11 3 views
12

Wiem, że zostało to pobite na śmierć, ale nie mogę tego uruchomić tak, jak powinno. Mam usługę WCF z kilkoma umowami. Wszystkie działają poprawnie, dzwoniąc bezpośrednio, np. http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278 Użyłem tej usługi WCF z powodzeniem w programach InfoPath Forms i Nintex Workflows. Teraz tworzę prostą aplikację ASP.Net, taką jak zrobiono w http://www.webcodeexpert.com/2013/04/how-to-create-and-consume-wcf-services.html. Udało mi się dodać odwołanie do usługi zgodnie z opisem w artykule. Dodałem przycisk a formularz i dodaje następujący kod w przypadku Button1_Click:Nie można znaleźć domyślnego elementu punktu końcowego, który odwołuje się do umowy

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ServiceReference1.CompanyWcfServiceClient x = new ServiceReference1.CompanyWcfServiceClient(); 
    var result = x.Get_Document_Dates_Received("223278"); 
} 

po kliknięciu na przycisk pojawia się błąd:

"Could not find default endpoint element that references contract 'ServiceReference1.ICompanyWcfService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element."

więc próbowałem dodanie następujących do web.config. (kopiowane bezpośrednio z pliku web.config w CompanyWcfService

<system.serviceModel> 
<services> 
    <service name="CompanyWcfServices.CompanyWcfService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="" binding="webHttpBinding" contract="CompanyWcfServices.ICompanyWcfService" behaviorConfiguration="webHttpEndpointBehavior" > 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">                 
    </endpoint> 
    </service> 
</services> 
<bindings> 
    <webHttpBinding> 
    <binding> 
     <security mode="None"> 
     </security> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name ="webHttpEndpointBehavior"> 
     <webHttp helpEnabled ="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="true"/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 

uzyskać dokładnie taki sam błąd, nie musi być coś innego dzieje g na.

końcu zrezygnował i wezwała służby takiego:

HttpWebRequest request = WebRequest.Create(@"http://merlin/Companyservices/CompanyWcfService.svc/Get_Document_Dates_Received/223278") as HttpWebRequest; 
request.Credentials = CredentialCache.DefaultCredentials; 
HttpWebResponse response = null; 

var result = ""; 
try 
{ 
    response = request.GetResponse() as HttpWebResponse; 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     using (Stream stream = response.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(stream, Encoding.UTF8); 
      result = reader.ReadToEnd(); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    result = ""; 
} 

Spędziłem godziny czytając posty, a większość z nich sugerują, aby skopiować informacje config do pliku web.config. Wydaje mi się to problematyczne (poza tym, że nie działa). Co się stanie, jeśli będę potrzebował korzystać z usługi WCF innej firmy? Czy muszę żądać informacji o konfiguracji od strony trzeciej? I czy Visa Versa, jeśli tworzę usługę WCF zaprojektowaną do użytku przez strony trzecie, czy muszę również dostarczyć im plik konfiguracyjny?

Odpowiedz

15

Błąd wskazuje, że punkt końcowy nie został zdefiniowany w sekcji konfiguracji klienta. Dodając odniesienie do usługi do swojego projektu, należy utworzyć dla ciebie sekcję klienta. Jeśli nie, to w pliku web.config dla aplikacji w sekcji system.serviceModel dodać następujące

<client> 
    <endpoint 
     name="CompanyWcfService_webhttpBinding" 
     address="http://merlin.com/CompanyServices/CompanyWcfService.svc" 
     binding="webHttpBinding" 
     contract="CompanyWcfServices.ICompanyWcfService" 
     behaviorConfiguration="webHttpEndpointBehavior" 
    /> 
</client> 
+0

Również. W sekcji System.ServiceModel w swojej aplikacji web.config nie potrzebujesz sekcji usługi. Usunąłbym to. Musisz tylko zdefiniować elementy wymienione w sekcji klienta. Podobnie jak zachowanieKonfiguracja lub ustawienia powiązania, jeśli dostosowałeś. –

+0

Matt, dzięki za odpowiedź. Niestety, nadal mam ten sam błąd. – user1337493

+0

Ten problem wydaje się być niedopasowaniem między usługą a plikiem web.config w aplikacji. Błąd wskazał, że nie można znaleźć usługi z umową "ServiceReference1.ICompanyWcfService". Zawiadomienie w web.config w aplikacji internetowej, umowa jest "CompanyWcfServices.ICompanyWcfService". Czy przypadkiem stworzyłeś usługę, dodasz do niej odwołanie do swojej aplikacji internetowej, a następnie zmienisz obszar nazw usług? –

9

jeśli mamy warstwową architekturę upewnij się 1) dodać app.config w „wszystkich projektów” 2) Dodaj szczegóły konfiguracji usługi we wszystkich app.config 3) uruchom projekt

+0

Dzięki za przypomnienie mi! :) – user1477388

1

W rzeczywistości do tej sztuczki należało użycie svcutil.exe do utworzenia proxy. Próbowałem utworzyć proxy za pomocą kreatora Visual Studio "Add Service". Kiedy to zrobiłem, konfiguracja była bardzo prosta.

SvcUtil.exe

7

Jeśli projekt odwołuje się do biblioteki i próbuje użyć funkcji WCF od funkcji tej biblioteki, to można spróbować kopiowania końcowego klienta z pliku konfiguracyjnym projektu do pliku konfiguracyjnego DLL za. Takie rzeczy zdarzyły mi się już jakiś czas temu, ponieważ biblioteka, do której się odwołałem w projekcie, nie używałaby pliku konfiguracyjnego projektu (w którym punkt końcowy klienta był skonfigurowany, ponieważ usługa była tam przywoływana), ale jego własna, więc wynik był system nie może znaleźć konfiguracji punktów końcowych.

+0

To samo tutaj - w moim przypadku był to projekt testowy odwołujący się do wspólnej funkcji w moim głównym projekcie. Odwoływany app.config był tym w projekcie testowym, a nie głównym projekcie. Dzięki! – Jeff

2

Dodanie wartości powiązania i klienta z pliku app.config do domyślnego pliku web.config rozwiązało problem.

4

W moim przypadku miałem projekt WPF odwołujący się do zewnętrznego UserControl, który miał odwołanie do usługi. Musiałem również dodać odniesienie do usługi do głównego projektu.

+0

Dzięki! To był ten sam problem, który miałem – Chance