2010-08-03 47 views
5

Vì vậy, tôi đang làm việc trên một dự án cho thực tập của tôi và đã đánh một chút của một bức tường gạch. Thật không may, những người duy nhất tôi biết đủ điều kiện để giúp tôi tại văn phòng đang đi nghỉ, và Google thật không may mắn (hoặc kỹ năng tìm kiếm của tôi không đủ), vì vậy tôi nghĩ tôi sẽ hỏi ở đây.Câu hỏi về C#, máy chủ, XML

Dự án về cơ bản là làm cho một máy chủ bắt chước một máy chủ mà công ty (tạo ra các ứng dụng điện thoại) đã có. Những gì tôi cần làm là yêu cầu một trong các ứng dụng của họ gửi yêu cầu tới máy chủ của tôi (tôi sẽ phải sửa đổi ứng dụng để thực hiện việc này, nhưng không biết cách thực hiện) và máy chủ của tôi trả lời bằng phản hồi XML rằng ứng dụng đã biết cách xử lý. (Mục đích chính là để chúng ta có thể thấy ứng dụng phản hồi như thế nào khi máy chủ thực gửi lỗi đó bằng cách mô phỏng nó trên máy chủ của tôi.)

Bây giờ, tôi đã có một vài yêu cầu HTTP mẫu , được lấy từ các mô phỏng với ứng dụng và máy chủ thực. Ứng dụng này được viết bằng C# và hiện gửi yêu cầu web HTTP đến vị trí trực tuyến của máy chủ thực, phản hồi các yêu cầu web HTTP này bằng XML. Máy chủ của tôi, tuy nhiên, sẽ không có vị trí trực tuyến, do đó ứng dụng sẽ phải được sửa đổi để hoạt động với các ổ cắm trên máy chủ lưu trữ cục bộ.

Câu hỏi của tôi:

1) Ông chủ của tôi nói để tạo ra một tập tin XML để kết hợp các yêu cầu nhất định với câu trả lời XML nào đó, nhưng tôi không có ý tưởng những gì ông có nghĩa là hoặc làm thế nào để làm điều này. (Anh ấy nói nó cũng có thể được thực hiện với một tập tin .ini.) Có ai biết không?

2) Khi tôi có tệp XML có thể tạo các liên kết này, tôi có thể kết hợp nó vào máy chủ để máy chủ của tôi có thể kiểm tra yêu cầu nhận được trên bảng yêu cầu hợp lệ và tìm ra phản hồi nào để gửi lại ?

3) Làm cách nào để có thể sửa đổi ứng dụng bằng cách sử dụng yêu cầu web HTTP và phản hồi bằng cách sử dụng ổ cắm?

Nếu bạn có bất kỳ câu hỏi/giải thích nào mà bạn cần để trả lời tốt hơn, vui lòng hỏi tôi.

Cảm ơn!

+2

Bạn đã cân nhắc việc yêu cầu anh làm rõ chưa? # 1 có thể có nghĩa là rất nhiều thứ. –

+3

Hãy tận dụng điều này khi bạn bắt đầu cuộc hành trình của bạn vào phần mềm, làm * không * chống lại hạt bất cứ khi nào có thể, bạn sẽ lãng phí thời gian và đốt cháy thời hạn. Lấy một máy khách HTTP và chuyển đổi nó để sử dụng các ổ cắm chỉ để bạn có thể sử dụng một máy chủ socket chống lại hạt, phương pháp tự nhiên ở đây là triển khai máy chủ của bạn trong một ngữ cảnh http. Sử dụng IIS cho điều này và một dịch vụ ASMX rất có thể. Thậm chí dễ dàng hơn, lấy một bản sao của máy chủ hiện tại nó chạy và chỉ sửa đổi nó để tất cả các yêu cầu được trả lời bằng các tin nhắn của bạn. –

+0

Hỏi sếp của bạn nếu máy chủ là một dịch vụ web WCF, hoặc một dịch vụ web ASMX, hoặc một cái gì đó khác. Nếu đó là một dịch vụ web WCF bạn đang thực hiện dễ dàng hơn nhiều, hãy hỏi anh ta nơi lấy hợp đồng và bắt đầu đọc hướng dẫn. –

Trả lời

1

Điều bạn mô tả là dịch vụ web. Thật không may, lời khuyên của anh ta để thay đổi một thiết lập trong một file .ini làm cho nó có vẻ như họ có một hệ thống độc quyền để thực hiện điều này, thay vì sử dụng ASMX chuẩn (yêu cầu IIS) hoặc WCF (có thể chạy trong IIS hoặc độc lập) dịch vụ, mà nó nghe giống như những gì bạn muốn) dịch vụ.

Nếu không có thêm thông tin về những gì họ đang sử dụng, tôi không biết rằng bạn sẽ có thể nhận được nhiều trợ giúp ở đây.

0

Hãy hỏi sếp của bạn nếu khách hàng này liên lạc với xà phòng, nếu vậy thì chỉ cần vào MSDN và tìm hướng dẫn về triển khai dịch vụ web ASMX, làm theo hướng dẫn và bạn sẽ có một trình bao để bắt đầu.

1

Để trả lời câu hỏi # 3:

HTTP là giao thức đã chạy trên một ổ cắm cụ thể (thường sử dụng cổng 80). Ổ cắm internet là điểm cuối được sử dụng để truyền dữ liệu giữa các quy trình. Nếu bạn muốn chạy giao thức của riêng mình, bạn sẽ cần phải tạo một ổ cắm mới (với TCP hoặc UDP) trên một cổng cụ thể.

Tuy nhiên, điều này sẽ yêu cầu bạn tạo máy khách và máy chủ của riêng mình để trao đổi dữ liệu giữa chúng.

Để bắt đầu, here là một ví dụ client-server rất đơn giản trong C# bằng cách sử dụng một socket tùy chỉnh.

Chúc may mắn!

0

Trước tiên tôi muốn nói rằng có vẻ như bạn có một số yêu cầu không rõ ràng mà bạn có thể nên làm rõ với sếp của bạn. Nếu bạn không chắc chắn những gì ông có nghĩa là bạn nên tìm hiểu bởi vì không có gì hút nhiều hơn là phải hỗ trợ giải thích sáng tạo của một ai đó yêu cầu. Có vẻ như sếp của bạn chỉ muốn một cách dễ dàng thay đổi liên kết để thử nghiệm mà không cần phải xây dựng lại ứng dụng để anh ấy yêu cầu bạn lưu trữ các liên kết đó trong tệp xml/ini có thể dễ dàng sửa đổi. Trong C#, bạn có thể dễ dàng đi giữa các đối tượng XML và DataSet vì vậy điều này không đáng kể. Tôi sẽ tạo cấu trúc dữ liệu trong một DataSet đầu tiên và sau đó sử dụng phương thức GetXml của DataSet để xuất ra định dạng xml.

2) Trong .NET, bạn có thể lưu trữ các đối tượng trong Cache và tạo một Cache Subendency là một liên kết tệp. Vì vậy, bất cứ khi nào tập tin được sửa đổi, Cache sẽ bị xóa. Bất cứ khi nào chương trình của bạn xử lý yêu cầu, nó kéo đối tượng từ Cache, nếu đối tượng không có trong Cache thì bạn có một khối điều kiện xây dựng lại nó từ tệp xml/ini trên đĩa. Tôi sẽ có khối điều kiện đó gọi ra một hàm sau đó tải định dạng xml được đề cập ở trên vào tập dữ liệu mà sau đó được lưu trữ trong Bộ nhớ Cache với Bộ nhớ cache phụ thuộc.

3) Nếu bạn đang cố gắng kiểm tra một ứng dụng i/o, việc sửa đổi nó để sử dụng một lớp vận chuyển khác có vẻ như là một ý tưởng tồi. Nếu ứng dụng hiện hoạt động trên HTTP để gửi yêu cầu thì chỉ cần định tuyến yêu cầu HTTP. Tôi nghi ngờ rằng ứng dụng có thể có cấu hình ở đâu đó xác định đường dẫn của webservice hiện đang gọi, khi bạn biết đường dẫn đó là gì, bạn có thể thay đổi hoặc nếu không thể thiết lập quy tắc DNS trên máy chủ đang chạy ứng dụng để định tuyến đến vị trí ứng dụng của bạn. Trên các cửa sổ, điều này đơn giản như việc thêm một dòng vào tệp máy chủ.