如何解决带有回调的WS-发现
我正在尝试通过回调功能实现ws-discovery,以便在局域网上发现我的IP摄像机
-
从
生成的作为ServiceReference1的连接服务http://schemas.xmlsoap.org/ws/2005/04/discovery/ws-discovery.wsdl
我从来没有使用过带有双工绑定的服务,因此在网络上没有那么多东西,因此大部分代码是通过收集来自各个地方的难题来完成的。 这是代码:
WSDualHttpBinding binding = new WSDualHttpBinding();
binding.ClientBaseAddress = new Uri("http://localhost:8000/wsDicOct2020/Client");
// var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
EndpointAddress endptadr = new EndpointAddress("http://239.255.255.250:3702");
InstanceContext instanceContext = new InstanceContext(new CallbackHandler());
TargetServiceClient targetServiceClient = new TargetServiceClient(instanceContext,binding,endptadr);
ProbeType probeType = new ProbeType();
probeType.Types = "NetworkVideoTransmitter";
ScopesType scopesType = new ScopesType();
scopesType.MatchBy = "http://www.onvif.org/ver10/network/wsdl";
probeType.Scopes = scopesType;
XmlElement[] xmlElementsAny = new XmlElement[10];
XmlAttribute[] xmlElementsAnyAttr = new XmlAttribute[10];
probeType.Any = xmlElementsAny;
probeType.AnyAttr = xmlElementsAnyAttr;
targetServiceClient.ProbeOp(probeType);
这是回调函数:
```
public class CallbackHandler : ServiceReference1.TargetServiceCallback
{
public void ByeOp(ByeOp request)
{
throw new NotImplementedException();
}
public void HelloOp(HelloOp request)
{
throw new NotImplementedException();
}
public void ProbeMatchOp(ProbeMatchOp request)
{
throw new NotImplementedException();
}
public void ResolveMatchOp(ResolveMatchOp request)
{
throw new NotImplementedException();
}
}
I also did:
netsh http add urlacl url=http://localhost:8000/wsDicOct2020/Client user=everyone
and started VisualStudio as administrator
When executing,I get the error:
**System.ServiceModel.EndpointNotFoundException: 'There was no endpoint listening at http://239.255.255.250:3702/**
WHAT IS WRONG WITH THE CODE ABOVE?
I cannot find any sample with ws-discovery service. Is it possible to do it in this way
But,when using the sample code from:
https://stackoverflow.com/questions/13416193/how-to-discover-onvif-devices-in-c-sharp/13424887#13424887
everything works well and I see in wireshark that the following message was sent to
239.255.255.250:3702
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe
</a:Action>
<a:MessageID>
urn:uuid:d191615b-37e7-49fe-bd90-0c4ea00be56a
</a:MessageID>
<a:ReplyTo>
<a:Address>
http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery
</a:To>
<ActivityId CorrelationId="8baaa049-f6a3-49fc-aa70-f0481abf23fa" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000
</ActivityId>
<VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo/ars9V0Ok9Kt+U4hUOepSQAAAAAZqAS01r3gE2M3Eke3NbCnebPQ6pfzN9HooOqOfILEP0ACQAA
</VsDebuggerCausalityData>
</s:Header>
<s:Body>
<Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery">
<d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">
dp0:NetworkVideoTransmitter
</d:Types>
</Probe>
</s:Body>
</s:Envelope>
In my opinion using callback function will be an elegant way to get noticed about a new device or when a device leaves the LAN.
Thanks in advance
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。