2013-07-11 28 views
12

Tôi biết điều này đã bị đánh đến chết, nhưng tôi không thể làm điều này để làm việc như nó cần. Tôi có một dịch vụ WCF với nhiều hợp đồng. Tất cả đều hoạt động tốt khi gọi điện trực tiếp, ví dụ: http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278 Tôi đã sử dụng dịch vụ WCF này thành công trên Biểu mẫu InfoPath và Quy trình làm việc của Nintex. Bây giờ tôi tạo một ứng dụng ASP.Net đơn giản, chẳng hạn như được thực hiện trong http://www.webcodeexpert.com/2013/04/how-to-create-and-consume-wcf-services.html. Tôi có thể thêm tham chiếu dịch vụ như được mô tả trong bài viết. Tôi đã thêm một nút hình thức, và thêm đoạn mã sau trong Button1_Click sự kiện:Không thể tìm thấy phần tử điểm cuối mặc định tham chiếu đến hợp đồng

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

khi tôi nhấp vào nút Tôi nhận được lỗi:

"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."

Vì vậy, tôi cố gắng thêm dòng sau vào web.config: (được sao chép trực tiếp từ tệp web.config của 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> 

Tôi gặp lỗi chính xác tương tự, phải có điều gì đó khác goin g trên.

Cuối cùng tôi đã từ bỏ và được gọi là dịch vụ như thế này:

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 = ""; 
} 

Tôi đã dành giờ đọc bài viết và hầu hết trong số họ đề nghị để sao chép các thông tin cấu hình vào file web.config. Điều này dường như có vấn đề với tôi (bên cạnh thực tế là nó dường như không hoạt động). Nếu tôi cần sử dụng dịch vụ WCF của bên thứ ba thì sao? Tôi có phải yêu cầu thông tin cấu hình từ bên thứ ba không? Và Visa Versa, nếu tôi tạo ra một dịch vụ WCF được thiết kế để được tiêu thụ bởi các bên thứ ba, tôi có cần cung cấp cho họ tệp cấu hình không?

Trả lời

15

Lỗi này chỉ ra rằng bạn không có điểm cuối được xác định trong phần cấu hình máy khách. Khi bạn thêm tham chiếu dịch vụ vào dự án của bạn, nó sẽ tạo phần khách hàng cho bạn. Nếu không thì trong web.config cho ứng dụng của bạn trong phần System.ServiceModel thêm dòng sau

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

Ngoài ra. Trong phần system.ServiceModel trong web.config ứng dụng của bạn, bạn không cần phần dịch vụ. Tôi sẽ xóa nó. Bạn chỉ cần xác định các mục được tham chiếu trong phần máy khách. Giống như cài đặt behaviorConfiguration hoặc binding nếu bạn đã tùy chỉnh. –

+0

Matt, cảm ơn phản hồi. Rất tiếc, tôi vẫn gặp lỗi tương tự. – user1337493

+0

Vấn đề này sau đó có vẻ là sự không khớp giữa dịch vụ và web.config trong ứng dụng. Lỗi này chỉ ra rằng không thể tìm thấy dịch vụ có hợp đồng 'ServiceReference1.ICompanyWcfService'. Thông báo trong web.config của bạn trong ứng dụng web, hợp đồng là "CompanyWcfServices.ICompanyWcfService". Bạn có vô tình tạo một dịch vụ, thêm một tham chiếu trong ứng dụng web của bạn vào nó và sau đó thay đổi không gian tên dịch vụ? –

9

Nếu chúng ta có kiến ​​trúc lớp hãy chắc chắn để 1) thêm app.config trong "tất cả các dự án" 2) Thêm chi tiết cấu hình dịch vụ vào tất cả app.config 3) chạy dự án

+0

Cảm ơn bạn đã nhắc tôi! :) – user1477388

1

Thực ra, mẹo này là sử dụng svcutil.exe để tạo proxy. Tôi đã cố gắng tạo proxy thông qua thuật sĩ "Add Service" của Visual Studio. Một khi tôi đã làm điều đó, cấu hình thật dễ dàng.

SvcUtil.exe

7

Nếu dự án của bạn được tham khảo thư viện và cố gắng sử dụng các chức năng WCF từ các chức năng của thư viện đó, sau đó bạn có thể thử sao chép các thiết bị đầu cuối khách hàng từ các tập tin cấu hình dự án để tập tin cấu hình của dll. Một số điều như thế này đã xảy ra với tôi một thời gian trước khi thư viện mà tôi tham chiếu trong dự án sẽ không sử dụng tệp cấu hình dự án (trong đó điểm cuối của máy khách được cấu hình từ khi dịch vụ được tham chiếu ở đó). hệ thống không thể tìm thấy cấu hình điểm cuối.

+0

Tương tự ở đây - trong trường hợp của tôi, đó là một dự án thử nghiệm tham chiếu đến một chức năng được chia sẻ trong dự án chính của tôi. App.config đang được tham chiếu là một trong dự án thử nghiệm, chứ không phải dự án chính. Cảm ơn! – Jeff

2

Thêm giá trị ràng buộc và khách hàng từ app.config vào web.config mặc định đã giải quyết được sự cố của tôi.

4

Trong trường hợp của tôi, tôi đã có dự án WPF tham chiếu đến một UserControl bên ngoài có tham chiếu dịch vụ. Tôi cũng phải thêm tham chiếu dịch vụ vào dự án chính.

+0

Cảm ơn! Đây là vấn đề tương tự mà tôi có – Chance

Các vấn đề liên quan