Http Unity WWW类方法Post在IIS7.5上有错误,而Coldfusion 9在文件上载上有错误

Http Unity WWW类方法Post在IIS7.5上有错误,而Coldfusion 9在文件上载上有错误,http,coldfusion,unity3d,iis-7.5,http-post,Http,Coldfusion,Unity3d,Iis 7.5,Http Post,使用Unity 4.0 我正在尝试使用Unity将一个文件上载到IIS7.5上的ColdFusion 9 Web服务器 IIS返回错误500,无任何解释 我打开了IIS失败的请求跟踪规则。这让我看到了从Unity发送到服务器的头 Content-Length: 496473 Content-Type: multipart/form-data; boundary="ZlJady3vWV8N5mlsvGGGJ3MEbxdsDabqkUtreBBK" Accept: */* Expect: 100-c

使用Unity 4.0

我正在尝试使用Unity将一个文件上载到IIS7.5上的ColdFusion 9 Web服务器

IIS返回错误500,无任何解释

我打开了IIS失败的请求跟踪规则。这让我看到了从Unity发送到服务器的头

Content-Length: 496473
Content-Type: multipart/form-data; boundary="ZlJady3vWV8N5mlsvGGGJ3MEbxdsDabqkUtreBBK"
Accept: */*
Expect: 100-continue
Host: www.test.com
User-Agent: UnityPlayer/4.3.0f4 (http://unity3d.com)
这在“一般请求实体”一节中

--ZlJady3vWV8N5mlsvGGGJ3MEbxdsDabqkUtreBBK
Content-Type: text/plain; charset="utf-8"
Content-disposition: form-data; name="frameCount"

35805
--ZlJady3vWV8N5mlsvGGGJ3MEbxdsDabqkUtreBBK
Content-Type: image/png
Content-disposition: form-data; name="file"; filename="file.png"

%89PNG
%1A
到目前为止,我觉得这一切都很好……然后我得到了一堆 包含文件数据的常规\u请求\u实体行。。。 缓冲区%16%D9%E6%B0Ck#%E2%84I-/%EB%06%05%FB不就是这样吗

直到最后一个。。。 缓冲区9%97%B7'%BE%D0%AB%09%C9%AD%88%D2

然后使用CALL_ISAPI_扩展名调用ColdFusion DLL C:\ColdFusion9\runtime\lib\wsconfig\1\jrun\u iis6\u wildcard.dll

然后是错误: 模块设置响应错误状态 模块名为IsapiModule 通知128 HttpStatus 500 HttpReason内部服务器错误 HttpSubStatus 0 错误代码0 配置例外信息
通知执行请求处理程序 错误代码操作已成功完成。(0x0)

所以ColdFusion中的某些东西正在轰炸。。。。 遍历ColdFusion日志时,没有发现与原始请求相关的内容

我尝试将相同的内容发布到较旧版本的Coldfusion 6.1,但它产生了以下错误:

500损坏的表单数据:无前导边界:!=--XNWSS9NYFDUNLKBN78LJHFHREDHQXHDKUXJXMJF

Unity似乎为IIS 7.5生成了正确的边界值,我们可以在上面看到,但我不确定……是否应该有一个未发送的结束边界

不幸的是,除了在IIS 7.5失败的请求日志中,我看不到Unity发送或服务器接收的实际数据

我看到很多帖子,人们将文件上传到PHP没有问题

这是我的密码:

WWWForm form = new WWWForm();
form.AddField("frameCount", Time.frameCount.ToString());
form.AddBinaryData ( "file", Image1.EncodeToPNG());
//Hashtable myheaders = new Hashtable();    
//myheaders.Add("enc-type", "multipart/form-data");
WWW w = new WWW("http://www.test.com/AuctionImages.cfm",form);
它基本上是从其他服务器的例子中复制出来的。。。 我玩过传递enc类型的标题,但是WWW应该根据文档自动完成这项工作

我尝试在AddBinaryData方法中传递mime类型

如果我砍掉AddBinaryData行,它就可以发布到页面了

有人知道我可以将一个网页工具设置为我的帖子URL,它可以吐出它从帖子中收到的内容,包括标题吗

有没有人在使用Unity WWW类上传文件时遇到过类似的问题

谢谢大家!!
Ryan

Ryan您自己可能已经几乎解决了这个问题,因为ColdFusion可能错误地(或正确地)解释了多部分边界标题

您可以通过自己手动形成标题来测试这一点:

var form = new WWWForm();
form.AddField("name","value");
var headers = form.headers;
var rawData = form.data;
var url = "www.myurl.com";

// Add a custom header to the request:
headers["Content-Type"] = "multipart/form-data";
headers["Boundary"] = "---------------";

// Post a request to an URL
var www = new WWW(url, rawData, headers);
yield www;

//.. process results from WWW request here...

有关表单标题的更多文档。

您需要启用
http post get协议。像这样更改Web.config
文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings />
    <connectionStrings />
    <system.web>
        <compilation debug="true">
        </compilation>
        <authentication mode="Windows" />
    <webServices>
      <protocols>
        <add name="HttpGet" />
        <add name="HttpPost" />
      </protocols>
    </webServices>
        <identity impersonate="false" />
    </system.web>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <staticContent>
            <mimeMap fileExtension=".unity3d" mimeType="application/octet-stream" />
        </staticContent>
    </system.webServer>
</configuration>


刚刚确认每个RFC[link]()需要一个结束边界。看起来Unity并没有发送尾随边界。有人能证实这一点吗?你应该能够使用类似或的东西来监控网络流量。谢谢!我找到了Fiddler并检查了请求…我发现Unity添加了这个标题。内容类型:多部分/表单数据;boundary=“CaVdLtDsgo1hJXK2mBx9Fexo8uMh50k11a1zgD3m”浏览器、IE和Firefox使用此标题:内容类型:多部分/表单数据;boundary=------------------------------------305343169213653我想是Unity在boundary字段中加的引号。Coldfusion必须使用包括引号在内的整个字符串作为边界!现在如何确定???我必须想办法让Unity不通过引用…比如在发送前替换标题…嘿,谢谢你花时间回答。我花了一整天的时间在这上面,发现了很多东西。一定要用你的更新更新你原来的帖子。帮助未来的人解决问题。:)小提琴手很灵巧。真不敢相信我的工具箱里竟然没有这个。2) Unity似乎在头部后面放置了两个cr/lf,而Cold Fusion只需要一个。边界周围的引用没有成功…ColdFusion不在乎。Unity在ColdFusion不喜欢的表单的每个字段上粘贴一个内容类型,它只希望在文件字段上使用它。使用Fiddler,我可以接受Unity请求…摆弄它…然后再次发送,让它正常工作…大多数情况下…但是能够在Unity中调整所有这些东西,看起来不太好。但我仍然在胡闹……如果Unity真的犯了错误,RyanYou可能会想向Unity提交一份bug报告。不过你会想提供很多证据的。