2009-11-24 22 views
25

Tôi đã chuyển dịch vụ truyền tệp của mình từ basicHttpBinding sang netTcpBinding vì tôi đang cố gắng thiết lập kênh chế độ song công. Tôi cũng đã bắt đầu dịch vụ chia sẻ cổng net.tcp của mình.Không thể tìm thấy địa chỉ cơ sở khớp với sơ đồ net.tcp

Tôi hiện đang ở chế độ tự phát và tự lưu trữ trên hộp xp cho đến khi chúng tôi di chuyển ứng dụng sang máy chủ dev. vì vậy, bây giờ, tôi không có quyền truy cập vào IIS.

Sau khi cấu hình dịch vụ của tôi như vậy:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService"> 
     <endpoint name="MyFileTransferEP" 
        address = "" 
        binding = "netTcpBinding" 
        bindingConfiguration="MyFileTransferNetTcpEP" 
        behaviorConfiguration="NetTcpEPBehavior" 
        contract="API.FileTransfer.IFileTransferService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" /> 
      </baseAddresses> 
     </host> 
</service> 

Và, tôi ràng buộc như vậy:

<netTcpBinding> 
     <binding name="MyFileTransferNetTcpEP" 
       hostNameComparisonMode="StrongWildcard" 
       closeTimeout="00:01:00" 
       openTimeout="00:01:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:01:00" 
       maxReceivedMessageSize="2147483647" 
       transferMode="Streamed" 
       portSharingEnabled="true"> 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message clientCredentialType="None" /> 
      </security> 
     </binding> 
</netTcpBinding> 

tôi nhận được lỗi folloing khi tôi phải và duyệt đến tập tin SVC:

Không thể tìm thấy địa chỉ cơ sở sơ đồ khớp nối net.tcp cho số điểm cuối wi thứ ràng buộc NetTcpBinding. Đề án địa chỉ cơ sở đã đăng ký là [http].

Việc đọc trực tuyến cho thấy rằng, để khắc phục vấn đề này, tôi cần thiết để thêm net.tcp liên kết với các ràng buộc của ứng dụng trong IIS. Nhưng, tôi phải làm gì nếu tôi tự lưu trữ và không có quyền truy cập vào IIS ?? Bằng cách này, nếu bạn đang đọc này và "làm" có IIS, hãy làm như sau: Nhấp chuột phải vào thư mục ảo/ứng dụng trong IIS -> Quản lý ứng dụng -> Cài đặt nâng cao. Và, trong phần Protocols Protocols, thêm net.tcp.

Bất kỳ ý tưởng nào?


CẬP NHẬT: Tôi nghĩ mình đã làm việc nhưng vẫn không hoạt động. Dưới đây là những gì tôi có bây giờ: Tôi vẫn nhận được thông báo "không thể tìm thấy địa chỉ cơ sở khớp với sơ đồ net.tcp". Tôi đã thay đổi tất cả các địa chỉ cơ sở của tôi để phản ánh đề xuất của bạn. Dưới đây là những gì tôi có bây giờ:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService"> 
      <endpoint name="MyJSONFileTransferEP" 
         address="json" 
         binding="webHttpBinding" 
         bindingConfiguration="jsonWeb" 
         behaviorConfiguration="WebHttpEPBehavior" 
         contract="API.FileTransfer.IJSONFileTransferService" /> 
      <endpoint name="MyPOXFileTransferEP" 
         address="pox" 
         behaviorConfiguration="WebHttpEPBehavior" 
         binding="webHttpBinding" 
         bindingConfiguration="poxWeb" 
         contract="API.FileTransfer.IPOXFileTransferService" /> 
      <endpoint name="MySOAPFileTransferEP" 
         address="filetransfer" 
         binding="netTcpBinding" 
         bindingConfiguration="netTcpWeb" 
         behaviorConfiguration="NetTcpEPBehavior" 
         contract="API.FileTransfer.ISOAPFileTransferService" /> 
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> 
      <host> 
       <baseAddresses> 
       <add baseAddress="net.tcp://localhost:2544/filetransfer/" /> 
       </baseAddresses> 
      </host> 
      </service> 

Tôi đã thử điều này với cả hai "net.tcp: // localhost: 2544" & "net.tcp: // localhost: 8001". Tôi có cần thêm (cho phép) điều gì đó trong cài đặt tường lửa của mình không? Bất cứ một đề nghị nào khác?

Đây là mexTcpBinding filetransferservice tôi trong file App.config của tôi:

<endpoint address="net.tcp://localhost:2544/filetransfer/mex" 
     binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" 
     name="filetransfermex"> 
     <identity> 
      <certificateReference storeName="My" storeLocation="LocalMachine" 
      x509FindType="FindBySubjectDistinguishedName" /> 
     </identity> 
     </endpoint> 

Tôi vẫn không thể tham khảo FileTransferServiceClient của tôi trong ứng dụng web của tôi.

Xin cảm ơn một lần nữa.

+0

, với baseAddress = "net.tcp: // localhost: 2544/filetransfer /" và address = "filetransfer" trên điểm cuối của bạn, URL hoàn chỉnh của bạn sẽ là " net.tcp: // localhost: 2544/filetransfer/filetransfer "- bạn đã thử kết nối ở đó chưa ?? –

+0

Cảm ơn - giám sát ngớ ngẩn. Tôi thường có "xà phòng" ở đó và thay đổi nó trở lại. Tôi đã dành thời gian qua đi qua các tệp App.config và Web.config của mình bằng một chiếc lược có răng và cuối cùng cũng có được nó để biên dịch. Khi tôi "thêm dịch vụ tham khảo", tôi có thể tham khảo ../trade/mex và .../auth/mex nhưng net.tcp của tôi .../filetransfer/mex không bao giờ xuất hiện như một tùy chọn. Vì vậy, tất cả mọi thứ biên dịch độc đáo ngoại trừ tôi không thể truy cập FileTransferServiceClient từ ứng dụng web của tôi. Bất kỳ ý tưởng tại sao .../filetransfer/mex không hiển thị? Tôi đang sử dụng mexTcpBinding và đã đăng những gì nó trông giống như trong câu hỏi của tôi. Cảm ơn một lần nữa. –

+0

đọc @marc_s. Cảm ơn một lần nữa. –

Trả lời

23

Bạn cần phải xác định chỉ là địa chỉ cơ sở (không phải là địa chỉ toàn) cho dịch vụ của bạn, và sau đó là phần còn lại trong thiết bị đầu cuối dịch vụ.Địa chỉ mà bạn có với filetransfer.svc tập tin cuối cùng không phải là một địa chỉ cơ sở hợp lệ (đó là một địa chỉ tập tin, thực sự)

<service behaviorConfiguration="transferServiceBehavior" 
     name="API.FileTransfer.FileTransferService"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8001/project/" /> 
     </baseAddresses> 
    </host> 
    <endpoint name="MyFileTransferEP" 
       address = "filetransfer" 
       binding = "netTcpBinding" 
       bindingConfiguration="MyFileTransferNetTcpEP" 
       behaviorConfiguration="NetTcpEPBehavior" 
       contract="API.FileTransfer.IFileTransferService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 

Với điều này, và sử dụng tự lưu trữ, dịch vụ của bạn sẽ được cung cấp tại địa chỉ đầy đủ :

net.tcp://localhost:8001/project/filetransfer 

Vì đây là net.tcp và bạn tự lưu trữ, bạn không cần phải có tệp svc.

UPDATE: nếu bạn muốn có thể để có được siêu dữ liệu về địa chỉ cơ sở net.tcp của bạn, bạn sẽ cần để lộ một thiết bị đầu cuối net.tcp MEX như thế này bên <service> phần của bạn:

 <endpoint name="NetTcpMEX" 
        address="netTcpMex" 
        binding="mexTcpBinding" 
        contract="IMetadataExchange" /> 
+0

Có vẻ như tôi vẫn gặp phải lỗi này. Tôi đã thử đề xuất của bạn nhưng điều đó dường như không làm điều đó. Tôi đã cập nhật câu hỏi của mình - bất kỳ đề xuất nào khác? Cảm ơn một lần nữa. –

+0

Xin chào, cảm ơn lần nữa. Tôi có thể biên dịch mã của tôi ngay bây giờ nhưng dường như không thể thêm dịch vụ net.tcp của tôi vào giao diện người dùng tham chiếu dịch vụ. Ngoài ra, tôi có cho dịch vụ. Khi tôi cố gắng điều hướng đến url của tôi: "net.tcp: // localhost: 2544/filetransfer/soap" trong trình duyệt, nó cho tôi biết rằng "firefox không biết cách mở địa chỉ này". Khi tôi cố gắng duyệt từ tập tin filetransfer.svc (tôi biết nó là không cần thiết) Tôi nhận được quen thuộc: "Không thể tìm thấy một địa chỉ cơ sở phù hợp với sơ đồ net.tcp cho điểm cuối với ràng buộc NetTcpBinding." –

+0

OK, điều này được giải quyết (và cảm ơn câu trả lời của bạn). Tôi có vấn đề liên quan nhưng tôi sẽ đăng lại. Cảm ơn một lần nữa. –

4

Vui lòng cài đặt thành phần cửa sổ "Không kích hoạt" từ Bảng điều khiển -> Chương trình -> Bật hoặc tắt cửa sổ -> Tính năng -> Thêm tính năng -> .net framework . * các tính năng -> Kích hoạt Wcf -> Kích hoạt Không-Http.

33

Lỗi (WCF): Không thể tìm thấy địa chỉ cơ sở khớp với sơ đồ net.tcp cho điểm cuối có ràng buộc NetTcpBinding. Các lược đồ địa chỉ cơ sở đã đăng ký là [http].

Bước 1: Note WAS (Windows Process Activation Service) hoặc không http hỗ trợ giao thức, chỉ được hỗ trợ bởi nền tảng sau: • Windows Vista • Windows 7 • Windows Server 2008

  1. Chuyển sang Bật hoặc tắt các tính năng của Windows
  2. Đi tới Microsoft .NET Framework 3.5
  3. Kiểm tra Windows Communication Foundation HTTP Activation
  4. Kiểm tra Windows Communication Foundation Non-HTTP Activation

Bước 2: IIS> trang web chủ WCF> Quản lý ứng dụng> cài đặt nâng cao> Enabled Protocols> Đặt giá trị cho HTTP, net.tcp

+1

Cảm ơn Amir. Bước thứ hai là một trong đó đã giúp tôi. – Dev

1

tôi đã cùng một vấn đề (Môi trường: Win7/IIS7.5 .NET4) và tôi đã giải quyết nó bằng cách định cấu hình ràng buộc thông qua appcmd.exe, có sẵn trong thư mục "c: \ Windows \ System32 \ inetsrv"

"appcmd.exe set pp "Tên trang web/tên ứng dụng" /enabledProtocols:http,net.tcp "

lưu ý: cấu hình IIS là phân cấp và do đó chúng ta nên thay đổi cấu hình ở mức thấp nhất có thể để tránh những thay đổi không mong muốn/vấn đề bảo mật trên các ứng dụng khác.

Các liên kết sau đây có thể giúp: http://msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

Hope trợ giúp này Albert

11

Space trong "Nghị định thư Enabled" entry trong IIS => Chọn ảo Thư mục/ứng dụng => cài đặt nâng cao => Đã bật Giao thức. ví dụ. http, net.tcp.(Khoảng cách giữa văn bản giao thức

này cần được http, net.tcp (tức. Không có không gian giữa các văn bản giao thức)

5

Đối với độc giả trong tương lai.

Hãy chắc chắn rằng bạn không sử dụng IIS- . Thể hiện

Đây là của tôi "Gotcha"

tham khảo:.

http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq

 Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ? 
     A: No. IIS Express only supports HTTP and HTTPS as its protocol. 

Đây là một tài sản thuộc Visual Studio và các web.csproj (hoặc tương tự) Properties và "Web" trái tab. Có một hộp kiểm được gọi là "Sử dụng IIS Express". Bỏ chọn.

Sau khi bạn làm điều đó, bạn vẫn sẽ phải đi đến IIS (7) và "http, net.tcp" cho "Nghị định thư Enabled" (như mô tả trong câu trả lời khác ở đây)

Ngoài ra, nếu bạn đang nhận được lỗi cụ thể theo đường ống.

Không thể tìm thấy một địa chỉ cơ sở phù hợp với chương trình net.pipe cho thiết bị đầu cuối với ràng buộc NetNamedPipeBinding.

Sau đó, bạn cần phải thêm "net.pipe" vào danh sách.

Ví dụ:

http, net.tcp, net.pipe

Cũng xem dưới đây để biết lỗi đặt tên đường ống cụ thể.

Configure WCF as Named Pipe hosted on IIS7

CŨNG: Kiểm tra các cửa sổ dịch vụ tương ứng (ống đặt tên hoặc tcp hoặc cả hai)

(tên Ống cửa sổ dịch vụ)

NetPipeActivator 

Net.Pipe Listener Adapter 

Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service. 

(cửa sổ tcp dịch vụ)

NetTcpActivator 

Net.Tcp Listener Adapter 

Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service. 
4

Sau khi thực hiện rất nhiều giải pháp .. i foun d các giải pháp cuối cùng trong blog này .. Tuy nhiên tôi đang đi để giải thích toàn bộ thủ tục ở đây .. bạn cần phải làm theo các bước dưới đây ..

Bước 1: (Windows Process Activation Service) hay không http hỗ trợ giao thức, chỉ được hỗ trợ bởi nền tảng sau: • Windows Vista • Windows 7 • Windows server 2008

  • đến Turn Windows hoặc tắt tính năng
  • tới Microsoft .NET Framework 3.5
  • Kiểm tra Windows Communication Foundation HTTP Activation
  • Kiểm tra Windows Communication Foundation Non-HTTP Activation

Bước 2: IIS> WCF trang web chủ> Quản lý ứng dụng> cài đặt nâng cao> Enabled Protocols> Set giá trị http, net.tcp

kiểm tra nếu vấn đề của bạn được giải quyết sau khi bước 2 completion..if không sau đó làm theo dưới đây bước

Bước 3: Trong một administrator-level Command Prompt window, chạy lệnh sau.

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='8082:*'] 

Khởi động lại IIS một lần hoặc bạn có thể nhận ngoại lệ tại

Ứng dụng của bạn trước thiết sẽ trông giống như dưới đây tại

enter image description here

0

Đối với Windows 10
Bước 1: Chuyển sang Bật các tính năng của Windows f> .Net Framework 4.6 Dịch vụ Nâng cao> WCF Dịch vụ> TCP Hoạt

Bước 2: IIS> trang web chủ WCF> Quản lý ứng dụng> cài đặt nâng cao> Enabled Protocols> Thiết lập giá trị net.tcp, http

Bước 3: Mở bảng điều khiển lệnh có quyền quản trị> nhập iisreset

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