Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件从NodeJS发布到C#WCF_C#_Node.js_Wcf_Request_Axios - Fatal编程技术网

将文件从NodeJS发布到C#WCF

将文件从NodeJS发布到C#WCF,c#,node.js,wcf,request,axios,C#,Node.js,Wcf,Request,Axios,我目前正在设置一个nodejs服务器,但该服务器上的一个操作是使用jsreport生成一个报告,将其保存在本地,然后将其发送到我们的另一个服务,即WCF 在WCF中,接收流并将文件保存在默认目录中 在服务器上测试请求,发送文件,效果很好。但是通过Node,使用Axios或Request进行通信,但是生成的文件是1kb 下面是NodeJS调用的摘录 要发出de请求,我使用模块请求v^2.88.2。(但我也尝试过Axios) pdf文件的内部有如下内容 -----------------------

我目前正在设置一个nodejs服务器,但该服务器上的一个操作是使用jsreport生成一个报告,将其保存在本地,然后将其发送到我们的另一个服务,即WCF

在WCF中,接收流并将文件保存在默认目录中

在服务器上测试请求,发送文件,效果很好。但是通过Node,使用Axios或Request进行通信,但是生成的文件是1kb

下面是NodeJS调用的摘录

要发出de请求,我使用模块请求v^2.88.2。(但我也尝试过Axios)

pdf文件的内部有如下内容

----------------------------209853603972788926274398 内容配置:表单数据;name=“file”;filename=“APR-RST-06-REV-00.pdf” 内容类型:application/pdf

%PDF-1.4 %׃כיב 10 obj < 文件发送到的我的C代码(我做了一些更改,以删除其他代码):

出于某种原因,此方法需要接口文件上的UriTemplate。但是,要在节点上工作,我需要将这些值作为url参数发送。也许这就是原因,但正如我所说,从失眠的角度来看,这种方法效果很好

  [WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/uploadFileReport?arg1={arg1}&arg2={arg2}&arg3={arg3}&arg4={arg4}&arg5={arg5}")]
        [OperationContract]
        string uploadFileReport(string arg1, string arg2, string arg3, string arg4, string arg5, Stream file);

WCF不支持
Formdata
默认情况下,它可以通过第三方库进行正确处理,

此外,在WCF中启用流时,函数的签名不能包含多个参数。

您能否正确访问服务描述页面?我认为这项服务不能正常工作,尽管你说你可以让它完美地工作。
有关上传文件的解决方案,请参阅此链接。


如果有什么我可以帮忙的,请随时告诉我。

对于那些可能遇到同样问题的人,以下是我的处理方法。我已将我的request.post更改为:

 const options2 = {
                                method: "POST",
                                url: urlSend,
                                headers: {
                                    "Authorization": "Bearer " + token, 
                                    "Content-Type": "application/octet-stream", 
                                },
                                encoding: 'binary',
                                multipart: [ 
                                    {  
                                        body: fs.createReadStream(reportFile) 
                                    }
                                ],
                            };  

request(options2, function (err, res, body) {
});
而且,在我的WCF web.config上,我添加了一个绑定,以便接受更大的文件:

 <binding name="UploadBinding"
                transferMode="Streamed"
              maxBufferPoolSize="2000000000"
              maxBufferSize="2000000000"
                receiveTimeout="01:00:00"
                sendTimeout="01:00:00"
                maxReceivedMessageSize="2000000000" >

          <readerQuotas maxDepth="2000000000"
               maxStringContentLength="2000000000"
               maxArrayLength="2000000000"
               maxBytesPerRead="2000000000"
               maxNameTableCharCount="2000000000" />
        </binding>

最后,将此绑定添加到服务

      <service name="WCFService.CRMH0001">
        <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="UploadBinding"
         contract="WCFService.ICRMH0001" />
      </service>


开头的行------20985360397278
和以
结尾的行\r\n\r\n
是多部分内容类型的分隔符。以
%PDF-
开头的内容就是PDF文件。看起来并不是所有的数据都被放到了输出流中。您的
请求
对象来自哪个包?你能告诉我们你是怎么做的吗?请回答您的问题。@O.Jones我已更改了问题。希望这是更完整的。
 <binding name="UploadBinding"
                transferMode="Streamed"
              maxBufferPoolSize="2000000000"
              maxBufferSize="2000000000"
                receiveTimeout="01:00:00"
                sendTimeout="01:00:00"
                maxReceivedMessageSize="2000000000" >

          <readerQuotas maxDepth="2000000000"
               maxStringContentLength="2000000000"
               maxArrayLength="2000000000"
               maxBytesPerRead="2000000000"
               maxNameTableCharCount="2000000000" />
        </binding>
      <service name="WCFService.CRMH0001">
        <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="UploadBinding"
         contract="WCFService.ICRMH0001" />
      </service>