将文件从NodeJS发布到C#WCF
我目前正在设置一个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参数发送。也许这就是原因,但正如我所说,从失眠的角度来看,这种方法效果很好将文件从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文件的内部有如下内容 -----------------------
[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>