Unity WWW类方法Post在IIS7.5上有错误,文件上传时使用Coldfusion 9

时间:2013-12-03 21:23:55

标签: http coldfusion unity3d iis-7.5 http-post

使用Unity 4.0

我正在尝试使用Unity将文件上传到IIS 7.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

到目前为止,这一切对我来说都很好......然后我得到了一堆 GENERAL_REQUEST_ENTITY包含文件数据的行... 缓冲%%16%D9%E6%B0Ck#%E2%84I - /%EB%06%05%FB't继续开启

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

然后它使用CALL_ISAPI_EXTENSION调用ColdFusion DLL C:\ ColdFusion9 \运行时\ lib中\ WSCONFIG \ 1 \查找jrun_iis6_wildcard.dll

然后错误: MODULE_SET_RESPONSE_ERROR_STATUS ModuleName IsapiModule 通知128 HttpStatus 500 HttpReason内部服务器错误 HttpSubStatus 0 ErrorCode 0 ConfigExceptionInfo
通知EXECUTE_REQUEST_HANDLER ErrorCode操作成功完成。 (0x0)

ColdFusion中的某些内容正在轰炸.... 通过ColdFusion日志的行程找不到与原始请求相关的任何内容

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

500腐败表单数据:无前导边界:!= --xnwss9NYfDunlkBN78LJhFHrlEDhqxHdKuXJxmjf

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

不幸的是,除了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-type传递标题,但WWW应该根据文档自动执行。

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

如果我按下AddBinaryData行,它就会很好地发布到页面上。

有没有人知道我可以设置的网页工具作为我的帖子网址,它会吐出从帖子中收到的内容,包括标题?

使用Unity WWW Class的文件上传是否有任何类似的问题?

谢谢! 莱恩

2 个答案:

答案 0 :(得分:0)

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...

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

答案 1 :(得分:0)

您需要像这样启用http post get protocols.Change 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>