2011-09-22 24 views
17

Tôi đã viết một trang web asmx webSerivce trên srv1. Tôi đã viết một dự án bll của một dự án asp.net (văn bản gốc: asp.net) trên srv2. Cả hai được lưu trữ dưới cùng miền webgọi asmx từ phía máy chủ C#: phần tử điểm cuối khớp với hợp đồng này có thể được tìm thấy trong phần tử máy khách

Tôi muốn gọi asmx từ dự án BLL của asp.net (văn bản gốc: asp.net (C#) mã đằng sau).

1) Tôi đã thêm tham chiếu web nhưng không thể tìm thấy bất kỳ hướng dẫn nào thực sự gọi cho dịch vụ được tham chiếu.

Tôi đã thử:

private void GetTemplateComponentsData() 
{ 
    var service = new ServiceReference.GetTemplateParamSoapClient(); 
    TemplateParamsKeyValue[] responsArray = service.GetTemplatesParamsPerId(id); 

    foreach (var pair in responsArray) 
    { 
     TemplateComponentsData.Add(pair.Key, pair.Value); 
    } 
} 

nhưng nhận được lỗi sau khi thực hiện dòng đầu tiên: không thể tìm thấy yếu tố endpoint mặc định tham chiếu hợp đồng 'ServiceReference.GetTemplateParamSoap' trong phần ServiceModel cấu hình máy khách. Điều này có thể do không tìm thấy tệp cấu hình nào cho ứng dụng của bạn, hoặc vì không có phần tử điểm cuối nào khớp với hợp đồng này có thể được tìm thấy trong phần tử máy khách.

Tôi đang thiếu gì?

2) Tôi di chuyển proj asp.net và asmx cùng nhau từ miền này sang miền khác. Có cách nào để tham khảo dịch vụ web tương đối này không?

Trả lời

36

OK, hãy để tôi cố gắng nói lại kịch bản của bạn để chắc chắn rằng tôi đã nhận nó đúng:

  1. Bạn có một dịch vụ web ASMX lưu trữ trên một số lĩnh vực.
  2. Bạn có một ứng dụng ASP.NET được lưu trữ trên cùng một tên miền khác nhau (nó không thực sự quan trọng) mà từ đó bạn muốn sử dụng dịch vụ web ASMX này bằng cách sử dụng trình khách WCF (svcutil).

Bước đầu tiên là để thêm một tham khảo dịch vụ cho các ứng dụng ASP.NET bằng cách chỉ đến WSDL của dịch vụ ASMX:

enter image description here

này sẽ làm 2 việc:

  • Nó sẽ thêm ServiceReference vào ứng dụng web của bạn

enter image description here

  • Nó sẽ thay đổi web.config của bạn và bao gồm các thiết bị đầu cuối khách hàng:

    <client> 
        <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx" 
        binding="basicHttpBinding" bindingConfiguration="PhoneNotifySoap" 
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap" /> 
        <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx" 
        binding="customBinding" bindingConfiguration="PhoneNotifySoap12" 
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap12" /> 
    </client> 
    

Bây giờ khi bạn muốn gọi dịch vụ này từ ứng dụng của bạn, bạn sẽ phải chọn điểm cuối bạn muốn sử dụng:

using (var client = new ServiceReference1.PhoneNotifySoapClient("PhoneNotifySoap")) 
{ 
    var result = client.GetVersion(); 
} 

Bây giờ chỉ cần thay đoạn mã của tôi bằng dịch vụ thực tế của bạn ames.

+0

Tệ của tôi, tôi cần gọi asmx này từ dự án bll (dự án thư viện), vì vậy tôi cần phải thêm các phần tử theo cách thủ công vào web.config? –

+2

@Elad Benda, có bạn cần một điểm cuối ứng dụng khách trong web.config của ứng dụng ASP.NET sử dụng thư viện này. Bạn cũng có thể cấu hình điểm cuối theo lập trình trong BLL nhưng thực hành tốt hơn là có phần cấu hình vì nó sẽ cho phép bạn dễ dàng thay đổi các thiết lập như url, bindings, ... –

+0

Tôi ngạc nhiên bởi câu trả lời chi tiết của bạn. Cảm ơn nhiều ! Tôi có thể hỏi bạn đã lưu trữ hình ảnh vào trang web nào không? –

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