我有一个简单的服务,我部署到Azure.可通过以下方式访问:
http://xxxxxxxxxxxxxxxxxxxxxxx.cloudapp.net/MyTestService.svc
Run Code Online (Sandbox Code Playgroud)
WSDL的URL使用内部计算机名称而不是公共DNS:
svcutil.exe http://rd001520d328923a/MyTestService.svc?wsdl
Run Code Online (Sandbox Code Playgroud)
显然,无法从机器外部访问WSDL.
我知道如果你在IIS中运行它,或者你知道服务的url,可以改变一些事情.例如,更改<serviceMetadata>配置以指定httpGetUrl属性,但这不起作用,因为我必须包括绝对URL.使用相对URL,它仍然使用内部计算机名称.真正的问题是WSDL包含带有机器名的URL引用,因此使它无用.
有两个不合标准的解决方法:
有人建议我可以抓取WSDL,编辑它来修复URL,然后上传它,以便可以从不同的URL访问它.
我发现2010年初有一个修补程序可用,但必须有一个更好的方法.
如何解决公共面向DNS使用而不是机器名称?
我得到了"Base-64 char数组的长度无效".IF(){...}内部是我试图让它工作的变种.它没有在第一行中失败而没有调用decrypt(...)证明它不是函数问题.我在第一次解密(...)调用时遇到了同样的错误.使用encoding.ascii的最后一个...将让我进入函数内部,但随后它在函数内部失败.我从数据库中获取正确的加密信息到字符串SSnum.它的值是:4 + mFeTp3tPF
try
{
string SSnum = dr.GetString(dr.GetOrdinal("Social Security"));
if (isEncrypted)
{
byte[] temp = Convert.FromBase64String(SSnum);
//SSnum = decrypt(Convert.FromBase64String(SSnum), Key, IV);
//SSnum = decrypt(Encoding.ASCII.GetBytes(SSnum), Key, IV);
}
txt_Social_Security.Text = SSnum;
}
catch { txt_Social_Security.Text = ""; }
Run Code Online (Sandbox Code Playgroud)
我被告知使用Convert.FromBase64String()而不是ASCII方法...所以为什么它失败了,我该如何解决?
我的网站上有以下代码:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="myButton_btn" eventname="Click" />
</Triggers>
<ContentTemplate>
<script>
function pageLoad(){
window.alert("<%=Session("myVariable")%>");
}
}
</script>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="myButton_btn" Text="Prev Month" runat="server"></asp:Button>
Run Code Online (Sandbox Code Playgroud)
每次单击按钮时都会运行javascript.但是,即使我的子例程在单击按钮后更新了会话变量,我也总是得到相同的警报.换句话说,在回发后运行相同的javascript,并且它不会更新.我很肯定会话变量IS正在改变.有谁知道为什么会这样?感谢您的投入!
非常感谢!
好吧,这应该是一个相当简单的问题,我可能遗漏了一些明显的东西.我有一个简单的脚本向服务器发出请求:
var DTO = { 'path': path };
var url = 'default.aspx/Get';
var test;
$('#getInstance').click(function () {
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
data: JSON.stringify(DTO),
contentType: 'application/json; charset=utf-8',
success: function (msg) {
test = msg;
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
});
Run Code Online (Sandbox Code Playgroud)
这很好,因为它连接到服务器并获取数据,只有一个简单的问题.它将此请求视为跨域请求,因此使用jsonp.服务器代码在这里:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static MyObject Get(string path)
{
MyObject foo = new MyObject();
return foo;
}
Run Code Online (Sandbox Code Playgroud)
通常这不会是一个问题,除了我访问WebMethod,它没有能力返回一个jsonp响应(意味着它无法将回调函数附加到响应.现在,如果这是一个手动响应,我可以破解它并附加参数,但我正在利用内置的序列化,所以没有办法搞砸响应.
为了帮助澄清.该页面托管在:
http://127.0.0.1:144/default.aspx
并且在firebug中看到的请求是:
http://127.0.0.1:144/default.aspx/Get?callback=jQuery1502768168154247801_1298656485388
让我强调一下这段代码的工作原理.唯一的问题是jQuery将此请求视为跨域.但为什么?
更新:嗯,经过更多的时间和更多的测试后,我已经将这个问题缩小到了jquery 1.5.1中的一个错误.我使用旧版本(所有1.4版本)进行了一些测试,我没有遇到任何问题,请求是使用JSON进行的,并且响应已成功收到.他们将这个请求视为CORS的变化是什么?