Lỗi này là khá rõ ràng - bạn đang sử dụng HTTP, bạn đã bật HttpGetEnabled trên hành vi ServiceMetadata của mình, nhưng bạn chưa cung cấp địa chỉ cơ sở trong cấu hình của mình.
Trong IIS, địa chỉ cơ sở là không cần thiết, cũng không được sử dụng, vì vị trí của tệp * .svc xác định địa chỉ dịch vụ của bạn. Khi bạn tự lưu trữ, bạn có thể và nên sử dụng địa chỉ cơ sở.
Thay đổi cấu hình của bạn để tìm một cái gì đó như thế này:
<system.serviceModel>
<services>
<service name="YourService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/YourService" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
..... (your own other endpoints) ...........
</service>
</services>
</system.serviceModel>
Bây giờ, "HttpGetEnabled" có một địa chỉ cơ sở http://localhost.8080/YourService
đến để có được những siêu dữ liệu từ.
Hoặc nếu bạn không thích điều này, một lần nữa, thông báo lỗi là khá rõ ràng về sự thay thế của bạn: xác định một URL tuyệt đối cho HttpGetUrl trong ServiceMetadata của bạn:
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="http://localhost:8282/YourService/mex" />
</behavior>
</serviceBehaviors>
Các khách hàng có thể nhận được siêu dữ liệu của bạn từ các điểm cuối "mex" của bạn, hoặc tại một URL cố định được định nghĩa như trong ví dụ thứ hai này, hoặc chúng sẽ đi đến địa chỉ cơ sở của dịch vụ cho siêu dữ liệu (nếu có).
Nếu bạn đến từ IIS và không điều chỉnh bất cứ thứ gì, bạn sẽ không có địa chỉ cơ sở cũng như URL tuyệt đối, rõ ràng cho điểm cuối trao đổi Siêu dữ liệu của bạn, vì vậy đó là lý do bạn gặp lỗi .
Marc
Nguồn
2009-11-01 22:06:03
mã của bạn để tạo ra các proxy là gì? – Dani
productsServiceHost = new ServiceHost (typeof (Products.ProductsService)); productsServiceHost.Open(); stop.IsEnabled = true; start.IsEnabled = false; trạng thái.Text = "Dịch vụ đang chạy ..."; – Attilah