Tóm tắt
Làm cách nào để truy cập dịch vụ WCF trên máy chủ cục bộ khi được lưu trữ trong IIS trên Azure? Azure không liên kết localhost hoặc 127.0.0.1 với trang web của tôi.Sử dụng WCF trên Localhost trên Azure
Chi tiết
Tôi có ứng dụng ASP.Net được lưu trữ trên Azure. Tôi đã thêm một .svc và một số quy trình công việc mà tôi muốn sử dụng qua WCF. Để giữ cho các vấn đề đơn giản, ứng dụng web của tôi chỉ đơn giản gọi các dịch vụ trên localhost, vì vậy tôi có các điểm cuối như thế này trong web.config;
<client>
<endpoint address="http://localhost:8080/Router.svc/Case" binding="basicHttpBinding" contract="NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow" name="Case" />
<endpoint address="http://localhost:8080/Workflow/Case/Case_default1.xamlx" binding="basicHttpBinding" contract="*" name="Case_default1" />
</client>
Điều này chỉ hoạt động tốt trên máy cục bộ của tôi. Vấn đề là khi tôi xuất bản này để Azure, trang web trong IIS không nhận được một ràng buộc để localhost, thay vào đó các ràng buộc luôn luôn đến địa chỉ IP thực tế của máy chủ. Nó kết thúc lên tim như thế này trong applicationHost.config:
<bindings>
<binding protocol="http" bindingInformation="10.61.90.44:80:" />
<binding protocol="https" bindingInformation="10.61.90.44:443:" />
<binding protocol="http" bindingInformation="10.61.90.44:8081:" />
</bindings>
Vì vậy, ngay sau khi ứng dụng web của tôi cố gắng gọi cho dịch vụ trên localhost (127.0.0.1 hoặc cho rằng vấn đề) nó không thành công ngay lập tức. Không cần phải nói, nếu tôi rdp vào máy chủ và thay đổi ràng buộc thì tất cả đều ổn.
Những gì tôi thấy thực sự kỳ lạ là có tấn ví dụ ra có nơi mọi người đang truy cập dịch vụ WCF trên localhost trên Azure vì vậy tôi không thể hiểu tại sao điều này là như vậy. Tôi đã thiết lập osFamily thành 2 và để gỡ lỗi này, tôi đã cho phép xuất bản web và truy cập máy tính để bàn từ xa mà tôi đoán, theo lý thuyết, có thể gây rối mọi thứ.
Những gì tôi đã nhìn
- tôi có thể viết lại địa chỉ điểm cuối trong mã của tôi trong thời gian chạy để thay thế localhost cho địa chỉ thực tế hoặc tạo ra các thiết bị đầu cuối tự động như mô tả của Ron trong các câu trả lời . Thật không may tôi đang sử dụng dịch vụ định tuyến WCF vì vậy tôi có thể làm việc phiên bản. Điều này có nghĩa là mã của tôi gọi điểm cuối Router và WCF Router lần lượt gọi dịch vụ/luồng công việc thực tế bằng cách sử dụng một điểm cuối được chỉ định trong web.config. Tôi không có quyền kiểm soát độ phân giải điểm cuối dịch vụ định tuyến mà không có, tôi nghĩ rằng, viết một tập hợp toàn bộ logic định tuyến mà chỉ có vẻ là rất nhiều công việc khi tôi muốn gọi localhost :)
- Chuyển sang sử dụng tên ống; Than ôi, nó gây ra một số vấn đề kỳ lạ với quy trình công việc, có thể là do in hai mặt, và tôi đang ở hạn chót nên không có thời gian để đi đến đáy của nó vào phút đó.
bất cứ ai có thể nói lý do tại sao isnt ràng buộc này đã có sẵn khi vai trò được tạo ra? – BozoJoe