2010-02-11 35 views
7

chúng tôi đang làm việc trên một phần mềm ngang hàng ngang hàng sẽ cho phép một số cửa hàng tạp hóa đồng bộ hóa khoảng không quảng cáo của họ với cái mà chúng tôi gọi là "trụ sở". Để thực hiện điều này, chúng tôi đang nghĩ đến WCF + WPF và không có dịch vụ web và IIS. Kinh nghiệm của tôi với WCF về cơ bản là không, do đó, câu hỏi của tôi là liệu một giải pháp TCP comm sử dụng WCF sẽ làm việc. Dữ liệu đang được truyền tải khá hạn chế, khoảng 2MB đối với tệp văn bản thuần túy nén (vì vậy chúng tôi đang gửi dữ liệu nhị phân!) Và điều này chỉ được thực hiện một lần mỗi ngày. Vì vậy, băng thông/tải không phải là một vấn đề ở đây. Ý tưởng vào thời điểm này là có một "máy chủ" WCF đang chạy tại HQ. Cửa hàng làm cho mình biết đến máy chủ đó và sau đó gửi các tập tin qua lại (tương tự như một ứng dụng trò chuyện). Điều tôi không chắc chắn về: mọi cửa hàng có cần một "máy chủ" WCF (hoặc điểm cuối) không? Làm cách nào máy chủ (= HQ) gửi tệp tới một trong các máy khách (= cửa hàng)? Mỗi cửa hàng có thể gửi một tập tin đến bất kỳ cửa hàng khác, và HQ, và mỗi cửa hàng cũng có thể "yêu cầu" một tập tin từ bất kỳ cửa hàng khác/HQ.Giao tiếp WCF với nhiều khách hàng không có IIS

Hai giới hạn: Không có máy móc/máy tính nào có thể chạy Windows server vì lý do ngân sách và như đã nêu trước khi IIS không hoạt động.

Trả lời

2

Nếu bạn hướng tất cả lưu lượng truy cập của mình qua máy chủ thì không có lý do gì khiến bạn không thể thực hiện điều này với WCF. Máy chủ sẽ lưu trữ các dịch vụ WCF trong IIS với các cửa hàng có một ứng dụng khách có thể tải lên và yêu cầu các tệp. Với phương pháp này, các cửa hàng sẽ không thể truyền trực tiếp các fiels cho nhau, nhưng họ sẽ phải thực hiện nó thông qua máy chủ chính, phù hợp với nhu cầu của bạn nếu bạn không có ngân sách cho kịch bản khác.

Nếu tất cả các lần gửi được thực hiện một lần mỗi ngày, yêu cầu tệp sẽ được thực hiện với mỗi khách hàng yêu cầu tệp nào họ yêu cầu, theo sau mỗi khách hàng tải lên bất kỳ tệp nào được máy chủ yêu cầu hoặc bất kỳ ứng dụng khách nào khác yêu cầu.Bước cuối cùng sẽ là máy chủ phân phối các tệp được yêu cầu cho từng máy khách. Rõ ràng, đây là một cái nhìn đơn giản của nó, quá trình thực tế có thể đòi hỏi một số suy nghĩ nhiều hơn nữa.

+0

Vâng, đó là những gì tôi đang suy nghĩ cũng tại thời điểm này. Có một máy chủ để xử lý tất cả lưu lượng truy cập ... tuy nhiên, máy chủ phải có khả năng gửi tệp cho khách hàng mà không cần phải yêu cầu chúng. Vì vậy, các máy chủ WCF bằng cách nào đó phải biết nếu khách hàng trực tuyến/kết nối. Điều đó có thể không? Cảm ơn! – John

+0

Nếu máy chủ không thể kết nối với máy khách, bạn có thể xử lý ngoại lệ cụ thể được ném và thử lại sau. bạn sẽ phải có một số loại bộ đếm thời gian cho quá trình chạy trên máy chủ của bạn. – Tanner

2

Bạn không cần lưu trữ WCF trong IIS, nhưng có lý do cụ thể nào bạn không muốn làm điều đó không?

Bạn có thể lưu trữ WCF trong ServiceHost, nhưng sau đó bạn cần xây dựng, duy trì và triển khai rất nhiều tính năng máy chủ/dịch vụ mà IIS cung cấp miễn phí, chẳng hạn như tái chế quy trình ứng dụng, lưu trữ dựa trên kích hoạt, v.v.

Trong mọi trường hợp, có vẻ như bạn cần ngang hàng với mạng ngang hàng. Bạn có thể làm điều đó với WCF bằng cách sử dụng NetPeerTcpBinding.

+0

Cảm ơn bạn đã trả lời. Điều đó có nghĩa là mỗi khách hàng cũng cần một "máy chủ" (điểm cuối), ví dụ: Một WCF được lưu trữ trong một dịch vụ Windows? Tôi đã hy vọng rằng chỉ có một máy sẽ lưu trữ các dịch vụ WCF, và tất cả các khách hàng khác có thể giao tiếp với bất kỳ khách hàng khác thông qua điều đó. Có, IIS sẽ có ích. Lame lý do: khách hàng chỉ không thích nó. – John

+0

Bạn có thể có một máy chủ và sử dụng cái được gọi là liên kết hai mặt, nghĩa là khách hàng đăng ký điểm cuối với dịch vụ trong suốt thời gian 'phiên'. Tuy nhiên, trong một cấu trúc liên kết trung tâm và nói như vậy, khách hàng chỉ có thể nói chuyện trực tiếp với máy chủ trung tâm chứ không phải với nhau. –

+0

NetPeerTCPBinding có cho phép một khách hàng gửi một thứ gì đó đến một ứng dụng khách cụ thể khác hay không có quyền kiểm soát ai nhận được tin nhắn? Theo tôi hiểu, đây là chương trình phát sóng, vì vậy tất cả khách hàng đều nhận được tin nhắn. Cảm ơn bạn lần nữa. – John

0

Nếu bạn có cơ hội thiết kế lại ứng dụng của mình, tôi khuyên bạn nên làm. Bạn có thể ném dây xung quanh trong WCF nhưng nếu bạn có thể tạo ra một hợp đồng dữ liệu, bạn có thể giữ tất cả các thông tin liên lạc của bạn mạnh mẽ đánh máy.

Nếu bạn có quyền truy cập vào máy chủ Windows 2008 thì IIS mới có thể lưu trữ WCF của bạn ngay cả khi không sử dụng tcp. Nếu không, bạn chỉ cần viết một ứng dụng mở một máy chủ dịch vụ, mà bạn thường sẽ bao bọc vào một dịch vụ windows. Nhưng như @MArk Seemann đã chỉ ra, bạn nhận được rất nhiều phần mềm miễn phí bằng cách chạy dịch vụ của bạn trong IIS.

Không có kinh nghiệm với PeerTcpBinding nhưng tôi có thể nói với bạn rằng NetTcpBinding là tốt đẹp và nhanh chóng cộng với tất cả các loại tính năng như mã hóa và xác thực nếu bạn muốn.

+0

Cảm ơn. Tôi đồng ý về IIS. Họ không muốn/không có khả năng Win2008, tuy nhiên, nhất mà họ có thể làm là Windows 7 + IIS. IIS cung cấp phần mềm miễn phí khi sử dụng TCP là dịch vụ Windows không? Như tôi đã nói, tải rất thấp và không phải là vấn đề. Và có một sự bảo đảm rằng chỉ có một khách hàng đang "nói chuyện" tại một thời điểm, tức là gửi một tệp. Cảm ơn một lần nữa! – John

+0

Về cơ bản, bạn chịu trách nhiệm tạo, giám sát lưu trữ, vv dịch vụ của bạn trong WCF, cũng như đảm bảo nó có cấu hình phù hợp và bạn không nhận được hỗ trợ công cụ. IIS sẽ chỉ lưu trữ một DLL với một dịch vụ trong đó, có một công cụ để giúp cấu hình dịch vụ, tăng sự kiện, vv nếu dịch vụ trực tuyến và tự động khởi động lại nếu nó bị trục trặc. YOu phải tự làm điều này nếu bạn không sử dụng nó. – Spence

3

Nếu bạn chỉ gửi tệp qua lại, tôi có thể đặt câu hỏi liệu WCF có tạo ra bất kỳ ý nghĩa nào hay không. Bạn đã xem xét việc sử dụng giao thức truyền tệp, như scp hay sftp?

Mọi máy sẽ phải chấp nhận kết nối và có thiết lập vị trí thả tệp, sau đó ứng dụng yuor sẽ phải theo dõi vị trí đó cho tệp mới. Tôi yêu WCF nói chung, nhưng một giao thức chuyển tập tin sẽ có một chân lên nếu đó là tất cả các bạn muốn làm.

+0

Tôi đồng ý. Theo quan điểm của tôi, WCF tập trung hơn vào trao đổi tin nhắn thay vì trao đổi tập tin. –

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