Hi,
I have the following error when I want to publish a protocol to a gRPC-enabled DataMiner. Is there anything that I can do to make this work?
DIS version: 2.44.1.4
The 'Test connection' is successful.
Note: The system is not in the local network.
Thx
System.ServiceModel.FaultException:
Message="Grpc.Core.RpcException: Status(StatusCode="Unknown", Detail="Bad gRPC response. HTTP status code: 500")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Skyline.DataMiner.Net.GRPCConnection.JwtGrpcClientInterceptor.<HandleAsyncResponse>d__10`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Skyline.DataMiner.Net.GRPCConnection.GRPCConnection.TransportSpecificHandleMessage(ConnectionToken token, DMSMessage[] messages, Int32 timeout)
at Skyline.DataMiner.Net.Connection.InternalHandlePackedMessages(ConnectionToken tok, DMSMessage[] msgs, Int32 timeout)
at Skyline.DataMiner.Net.Connection.InternalHandleUnpackedMessages(DMSMessage[] msgs, Int32 timeout)
at Skyline.DataMiner.Net.Connection.HandleMessages(DMSMessage[] msgs, Int32 timeout)
at Skyline.DataMiner.Net.Connection.HandleMessage(DMSMessage msg, Int32 timeout)
at SLDisDMAComm.SLDisDmaCommService.UploadProtocol(String name, String version, String contents)"
Source="mscorlib"
StackTrace:
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at SLDisDMACommShared.ISLDisDmaCommService.UploadProtocol(String name, String version, String contents)
at SLDisDMACommClient.DmaClient.UploadProtocol(String name, String version, String contents)
at Skyline.VSX.ProtocolEditor.Margin.PublishDropDownButton.<>c__DisplayClass19_0.<PublishProtocol>b__0(DoWorkEventArgs a)
at SLDisCommon.Tools.Tools.<>c__DisplayClass35_0.<RunInBackground>b__0(Object a, DoWorkEventArgs b)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
I experience the exact same behavior. Note that publishing automation scripts works, this is only when I’m trying to publish protocols.
As an update. The root cause of the issue has been identified as a firewall rule that was blocking the request.
The rule, detecting command injection, was filtering on HTTP POST requests where the word 'set' is found in the content. That 'set' word was indeed present in the protocol that was uploaded.
Hi Jan
DIS is sending a SLNet call to upload the protocol and that the gRPC connection is returning a failure. Would it be possible to check if other SLNet calls also return a failure?
As DIS can successfully connect to the DataMiner, I don't think there is an issue in DIS itself. As I'm not an expert in gRPC and how it exactly works in DataMiner, I'll leave that up to the experts of that area.
It can also be useful to know which DataMiner version is being used.
Possibly a malformed packet?
Can check if the SLNetTypes DIS is using and the one the server is using are compatible?
Does it work if you replace the SLNetTypes.dll used by DIS by the one the server is using?
Is it a particularly large protocol, maybe we’re having somewhat different size limits for gRPC?