2008-12-16 41 views
10

Tôi có một điều khiển Silverlight có tham chiếu đến dịch vụ wcf được bật Silverlight.url tương đối trong liên kết dịch vụ wcf

Khi tôi thêm một tham chiếu đến các dịch vụ kiểm soát Silverlight của tôi, nó bổ sung thêm dòng sau vào file clientconfig tôi:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_DataAccess" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:3097/MyApp/DataAccess.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DataAccess" 
       contract="svcMyService.DataAccess" name="BasicHttpBinding_DataAccess" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Làm thế nào để xác định một địa chỉ tương đối trong địa chỉ endpoint thay vì url tuyệt đối? Tôi muốn nó hoạt động bất kể tôi triển khai ứng dụng web đến đâu mà không phải chỉnh sửa tệp clientconfig, vì thành phần silverlight và ứng dụng web sẽ luôn được triển khai cùng nhau. Tôi nghĩ rằng tôi có thể chỉ định "DataAccess.svc" nhưng nó không có vẻ như thế.

Trả lời

4

Bạn không thể sử dụng URI tương đối trong cấu hình điểm cuối của khách hàng. Những gì bạn có thể làm là chỉ cần thêm một hàm tạo khác vào lớp proxy của bạn sẽ lấy một số tham số URL mà bạn có thể nhận được từ một giá trị cấu hình khác hoặc sử dụng một trong các phương thức lớp Dns.

+0

Nếu tôi sử dụng phương pháp này, tôi sẽ đặt thông số url tương đối của mình ở đâu? Tôi đang nhìn vào ServiceReferences.ClientConfig và tôi không thấy một vị trí để đặt nó - nó dường như không có các yếu tố tương tự ans một tập tin web.config. – Jeremy

14

Giải pháp của tôi:

Thay vì sử dụng các nhà xây dựng devault (trong đó sử dụng các tập tin ServiceReferences.ClientConfig) để nhanh chóng lớp proxy của tôi, tôi sử dụng như sau:

svcMyService.DataAccessClient svcProxy_m; 

System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding(); 

/* 
Create an end point, build a an absolute uri reference by specifing the host address and a relative referece to the service page. 
Application.Current.Host.Source will be something like Http://server/app/ClientBin/SilverlightApp.xap"<br/><br/> 
Specifying Uri(Application.Current.Host.Source, "../DataAccess.svc")); will return "Http://server/app/DataAccess.svc" 
*/ 

System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri(Application.Current.Host.Source, "../DataAccess.svc")); 

svcProxy_m = new svcMyService.DataAccessClient(binding, address); 
+0

+1 vừa giải quyết vấn đề triển khai Silverlight của tôi. – geofftnz

+0

Tôi nghĩ rằng hành vi được mô tả ở đây sẽ là hành vi mặc định của Silverlight. Tôi bối rối rằng chúng tôi sẽ cần phải làm điều này cho mọi dự án. :( – Jeremy

1

Tôi đã sử dụng uri tương đối trong cấu hình và ứng dụng SL4 của tôi hoạt động.

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_ICorrectionService" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings>   
     <client> 
      <endpoint address="/CorrectionService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICorrectionService" 
      contract="CorrectionService.ICorrectionService" name="BasicHttpBinding_ICorrectionService" /> 
     </client>   
    </system.serviceModel> 
</configuration> 
Các vấn đề liên quan