2010-09-20 30 views
6

Tôi đã nhận Dịch vụ WCF chạy bằng HTTPS, Nó hiển thị Infopage, nhưng URL bên dưới "Để kiểm tra dịch vụ này, ... với cú pháp sau:" là:URL sai trong siêu liên kết WSDL khi sử dụng WCF (https)

svcutil.exe https://servername.group.service.com/MyService.svc?wsdl (địa chỉ đầy đủ của máy chủ)

Thay vì URL đúng https://my.service.com/MyService.svc?wsdl (hostheader giao), làm thế nào tôi có thể lấy nó để hiển thị các URL đúng (<URL of the Service> + ?wsdl)?

<services> 
    <service name="MyService" behaviorConfiguration="MyServer.MyServiceBehavior"> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBigStrings" contract="IMyService"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyService.MyServiceBehavior"> 
     <serviceCredentials> 
     <serviceCertificate findValue="my.service.com" x509FindType="FindBySubjectName"/> 
     </serviceCredentials> 
     <serviceMetadata httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBigStrings"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"/> 
     </security> 
     <readerQuotas maxStringContentLength="1048576" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Tôi đã cố gắng để thay đổi <serviceMetadata httpsGetEnabled="true"/> vào <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://my.service.com/MyService.svc"/> nhưng nó chỉ nói: "Một đăng ký đã tồn tại cho URI https://my.service.com/MyService.svc"

+0

Tôi cũng gặp vấn đề tương tự. Bạn đã tìm thấy một giải pháp về điều này? – Turrau

+0

Không, không cho đến nay, xin lỗi ... – Hinek

+0

Bạn có đang lưu trữ dịch vụ này trong IIS không? Nếu có thì IIS xác định URL đó chứ không phải WCF. –

Trả lời

4

Bạn đã xác định rằng bạn đã thiết lập máy chủ Header. Nó được đặt cho SSL hay chỉ là Http. Hãy nhớ rằng, IIS UI không có các trường để đặt Host-header cho SSL. bạn cần sử dụng các kịch bản quản trị (IIS 6.0) hoặc netsh.exe cho phiên bản sau của IIS.

+1

Host Header chỉ được thiết lập cho Http, bạn có liên kết để thiết lập Host Header cho SSL không? – Hinek

+1

Đây là giải pháp cho vấn đề này như thế nào? –

+0

Amit - cảm ơn bạn !! Sau nhiều giờ và giờ tìm kiếm các giải pháp, điều này đã làm các trick. Chúng tôi đã xóa tiêu đề máy chủ lưu trữ cho cả http và https để phù hợp với cấu hình cân bằng tải của chúng tôi. Thêm họ trở lại trong cố định vấn đề. Nhân tiện, chúng tôi cũng thấy một trang trống với 400 lỗi yêu cầu không hợp lệ khi cố gắng yêu cầu WSDL qua HTTPS (đối với bất kỳ ai gặp sự cố tương tự). – adamisnt

0

Bạn có thể tìm thấy một số nền tảng về vấn đề này tại StackOverflow sau link - điều đầu tiên tôi sẽ cố gắng (họ đưa ra một số kịch bản khác nhau có liên quan nhiều hơn một chút) sẽ đặt URI Nghe trên định nghĩa Điểm cuối Dịch vụ. Khi tôi gặp sự cố khi nhận địa chỉ WSDL ngay trong ứng dụng của mình, tôi đã có thể thiết lập điều đó để sửa nó. Trong trường hợp đó, tôi chỉ đơn giản là cố gắng sửa chữa chương trình (chúng tôi đứng sau BIGIP và nó đã chấm dứt SSL nên sơ đồ cần phải là https mặc dù WCF ở phía máy chủ nghĩ rằng nó đã nhận được http).

<endpoint address="https://www.sslloadbalancer.com" binding="someBinding" contract="IMyServiceInterface" listenUri="http://www.servicehost.com" ... /> 

Tôi tin rằng sẽ sửa chữa các WSDL cho bạn

+0

Dịch vụ được lưu trữ trong IIS, vì vậy IIS xác định URL, tôi không thể đặt địa chỉ điểm cuối theo cách thủ công trong cấu hình. – Turrau

+0

Ví dụ của tôi là từ các dịch vụ được lưu trữ trên IIS - bạn biết nơi bạn đang triển khai dịch vụ của mình trên IIS, vậy tại sao bạn không thể đặt địa chỉ điểm cuối trong cấu hình? – HintonBR

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