Ứng dụng của chúng tôi sử dụng WCF trên các đường ống được đặt tên để giao tiếp giữa hai quy trình (lưu ý: không phải là quá trình là một dịch vụ Windows.) Ứng dụng của chúng tôi đã chạy trong lĩnh vực này mà không có sự cố trong một vài năm nay.Ứng dụng của chúng tôi phá vỡ ứng dụng WCF của chúng tôi
Chúng tôi hiện đang nhận được báo cáo rằng sự hiện diện của một ứng dụng của bên thứ ba (cụ thể là Garmin Express) đang phá vỡ chúng tôi. Tôi đã cài đặt Garmin Express trong nhà và xác nhận hành vi. Cụ thể là "Dịch vụ cập nhật cốt lõi của Garmin", khi chạy, khiến ứng dụng của chúng tôi thất bại.
Khi dịch vụ Garmin đang chạy, phía "dịch vụ" của ứng dụng của chúng tôi bắt đầu và không có vấn đề gì khi tạo điểm cuối WCF. Nhưng khi máy khách khởi động và cố gắng kết nối với dịch vụ, nó không thành công với EndpointNotFoundException, như thể dịch vụ đó thậm chí không chạy.
Tại thời điểm này, tôi thực sự có thể dừng dịch vụ Garmin từ bảng điều khiển Dịch vụ, sau đó chạy lại máy khách thành công mà không cần khởi động lại dịch vụ của chính chúng tôi. Nếu tôi bắt đầu lại dịch vụ Garmin, các nỗ lực khác để khởi động máy khách thất bại. Vì vậy, điều này ít nhất chứng minh rằng dịch vụ WCF của chúng tôi là lên và chạy toàn bộ thời gian, và phần mềm Garmin bằng cách nào đó ngăn chặn khả năng của khách hàng của chúng tôi để kết nối với nó.
Chúng tôi đang sử dụng tên riêng của mình cho địa chỉ điểm cuối (ví dụ: "net.pipe: // localhost/MyPrivateApplication"). Tôi đã thử thay đổi địa chỉ này thành nhiều tên khác, nhưng điều đó không ảnh hưởng đến vấn đề này.
Làm cách nào để có thể áp dụng một ứng dụng khác, đơn giản bằng cách chạy, phá vỡ khả năng của ứng dụng của riêng chúng tôi khi sử dụng WCF?
Cập nhật: theo yêu cầu, đây là đoạn mã từ phía dịch vụ. Tôi đã đơn giản hóa nó từ mã ban đầu của chúng tôi trong một nỗ lực để cô lập vấn đề. Cho đến nay, không một thay đổi duy nhất tôi đã thực hiện đã có bất kỳ ảnh hưởng nào đến vấn đề này.
MyService service = new MyService();
ServiceHost host = new ServiceHost(service);
string hostAddress = new Uri("net.pipe://localhost/MyWCFConnection");
host.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), hostAddress);
host.Open();
Dịch vụ của bạn chỉ định URL dịch vụ của dịch vụ như thế nào? Có phải là địa chỉ cơ sở + địa chỉ tương đối hoặc địa chỉ absoute không? Có lẽ bạn có thể đăng các trích xuất từ mã/cấu hình cho biết điểm cuối dịch vụ của bạn được thiết lập như thế nào. –
Tôi đã cập nhật bài đăng của mình bằng đoạn mã. Tôi khá chắc chắn đây là một địa chỉ tuyệt đối, đúng không? Một lần nữa, mã phía dịch vụ này thực hiện thành công cho dù dịch vụ Garmin đang chạy hay không. Chỉ phía máy khách bị ảnh hưởng. – ObjetDart
Vâng, đó là một địa chỉ tuyệt đối, vì vậy có một cái gì đó tinh tế hơn xảy ra hơn đề nghị đầu tiên của tôi. –