Tôi có dịch vụ WCF được lưu trữ dưới dạng Dịch vụ Windows. Chúng tôi muốn kích hoạt điểm cuối mex tại cùng một địa chỉ (nhưng với hậu tố '/ mex'). Tôi đã cố gắng để làm điều này (không thành công) bằng cách sử dụng cấu hình sau:Làm thế nào để buộc một điểm cuối net.tcp mex (mexTcpBinding) để tham gia chia sẻ cổng?
<system.serviceModel>
<services>
<service
name="MyCompany.MyService"
behaviorConfiguration="defaultServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost"/>
</baseAddresses>
</host>
<endpoint
address="MyService"
binding="netTcpBinding"
contract="MyCompany.IMyService"
bindingConfiguration="netTcpBindingConfig"
/>
<endpoint
address="MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="netTcpBindingConfig" portSharingEnabled="true" />
</netTcpBinding>
</bindings>
</system.serviceModel>
Khi nó chạy, các máy chủ dịch vụ ném một AddressAlreadyInUseException
phàn nàn rằng "Đã có một người biết lắng nghe trên IP endpoint 0.0.0.0:808". Điều này thực sự có ý nghĩa với tôi vì dịch vụ chia sẻ cổng đã mở cổng đó để phục vụ điểm cuối MyService
cùng với bất kỳ dịch vụ nào khác yêu cầu chia sẻ cổng đó trên máy này.
Vì vậy, có vẻ như các thiết bị đầu cuối mex muốn truy cập exlusive đến cổng 808. Tôi có thể làm việc này bằng cách tinh chỉnh mex endpoint như vậy:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
này có nghĩa là thiết bị đầu cuối mex hiện nay có cổng độc quyền riêng của mình . Nhược điểm với điều này là bất kỳ dịch vụ nào khác muốn trưng ra một điểm cuối mex cũng sẽ cần một cổng duy nhất cho điểm cuối mex của nó. Điều này làm cho nó rất khó đoán khi tìm kiếm điểm cuối mex.
Có cách nào để buộc điểm cuối mex tham gia chia sẻ cổng không?
Chỉ cần một ý nghĩ: Thêm bindingConfiguration = "netTcpBindingConfig" đến mex endpoint? –
@Torben Yeah, tôi đã thử điều đó. Khi tôi làm điều đó, điểm cuối mex không có vấn đề chia sẻ, nhưng nó hoàn toàn không tạo ra bất kỳ siêu dữ liệu nào. –