2010-11-17 22 views
9

Tôi có dịch vụ .Net chạy trên IIS 6 và WCF mà tôi muốn tạo hai điểm cuối cho. Một được bảo mật bằng HTTPS và xác thực cơ bản sẽ được truy cập từ DMZ của chúng tôi và một điểm cuối không có bảo mật chỉ có thể truy cập được từ mạng an toàn nội bộ. Tường lửa và các bộ lọc có thể .Net sẽ đảm bảo rằng dịch vụ không an toàn không thể truy cập được bên ngoài mạng bảo mật.Hai điểm cuối cho cùng một dịch vụ trong WCF, một thiết bị được bảo mật không phải là

Cho đến nay tôi đã không thành công khi nhận được hai điểm cuối làm việc với các tham số bảo mật khác nhau. Một cấu hình tôi đã cố gắng là:

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService.svc" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService.svc" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

<behaviors> 
    <endpointBehaviors> 
     <behavior name="restBehavior"> 
      <webHttp /> 
     </behavior> 
     <behavior name="secBehavior"> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

<bindings> 
    <webHttpBinding> 
     <binding name="customSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

Các tập tin UnSecuredAccessToMyService.svc và SecuredAccessToMyService.svc trông giống như:

<%@ ServiceHost 
    Factory="somefactory, anotherfactory" 
    Service="My.Service, AnotherService" 
%> 

Tôi rất mới để WCF và Net chi tiết để thêm thực sự có thể giúp đỡ, cám ơn!

Trả lời

7

Dường như bạn đã có những ràng buộc và hành vi của bạn một chút pha trộn. Hãy thử thay đổi cấu hình của bạn như sau:

<services> 

    <service name="My.Service"> 
     <endpoint address="UnSecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 

     <endpoint address="SecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingName="secureWebHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 
    </service> 

</services> 

<bindings> 
    <webHttpBinding> 
     <binding name="secureWebHttpBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

này quy định cả hai điểm cuối nên sử dụng WebHttpBinding, nhưng người ta sẽ sử dụng mặc định ràng buộc và một ý chí sử dụng một tên ràng buộc "secureWebHttpBinding" được cấu hình để sử dụng an ninh Giao thông vận tải lớp (SSL) và xác thực máy khách cơ bản.

Chúng không yêu cầu cấu hình thêm hoặc hành vi tùy chỉnh trừ khi bạn có nhu cầu ngoài những gì được tích hợp sẵn theo mặc định.

Rất tiếc, rất nhiều WCF là gỡ lỗi thử và lỗi cho đến khi bạn xác định chính xác yếu tố nào không hoạt động chính xác. Nếu thông tin tôi cung cấp cho bạn không hiệu quả, hãy chỉ định thêm các triệu chứng của sự cố của bạn và tôi sẽ cố gắng hỗ trợ thêm.

+0

không _bindingNamespace_ sẽ là *** httpS ***? URI (hoặc ** baseaddress **) là _'https: // mydomain/myservice'_? – Kiquenet

+0

Không gian tên của bạn là một URI duy nhất đủ điều kiện cho các yếu tố XML từ siêu dữ liệu ràng buộc dịch vụ của bạn để chúng rõ ràng. Nó có thể là bất kỳ giá trị URI nào, nhưng thông thường nó lấy từ một URL để cho nó một số người dễ đọc.Lược đồ http: // thường được sử dụng khi bạn muốn cung cấp một số tài liệu ở vị trí đó. –

1

Sử dụng cấu hình như ý

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/UnSecuredAccessToMyService.svc"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

rằng địa chỉ = "UnSecuredAccessToMyService"địa chỉ = "SecuredAccessToMyService" cho phần thiết bị đầu cuối mà là rất quan trọng. Bây giờ khi bạn đang gọi URL từ client bạn cần phải gọi URI như http://localhost/MyService/UnSecuredAccessToMyService.svc/UnSecuredAccessToMyService cho truy cập không có bảo đảm và http://localhost/MyService/UnSecuredAccessToMyService.svc/SecuredAccessToMyService cho việc truy cập bảo đảm.

BaseAddress nên là tên đầy đủ bao gồm .svc

bằng cách sử dụng cấu hình trên, bạn sẽ có thể sử dụng cùng một tập tin .svc, hợp đồng tương tự, cùng một hoạt động/phương pháp nhưng 2 thiết bị đầu cuối khác nhau, 1 an toàn và 1 không an toàn.

+0

Bảo mật sẽ là *** httpS ***? URI (hoặc ** baseaddress **) là _'https: // mydomain/myservice'_? _'HTTPS: //localhost/MyService/UnSecuredAccessToMyService.svc'_ – Kiquenet

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