小编Vic*_*tor的帖子

如何将WSDL URL从内部机器名更改为public?

我有一个简单的服务,我部署到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使用而不是机器名称?

wcf wsdl azure

41
推荐指数
2
解决办法
3万
查看次数

Base-64 char数组的长度无效

我得到了"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方法...所以为什么它失败了,我该如何解决?

c# base64

5
推荐指数
2
解决办法
3万
查看次数

在ASP.NET中异步回发后更新Javascript

我的网站上有以下代码:

    <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正在改变.有谁知道为什么会这样?感谢您的投入!

非常感谢!

javascript asp.net ajax postback

4
推荐指数
1
解决办法
8040
查看次数

为什么同一域ajax请求添加jsonp回调参数?

好吧,这应该是一个相当简单的问题,我可能遗漏了一些明显的东西.我有一个简单的脚本向服务器发出请求:

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的变化是什么?

asp.net ajax jquery json

3
推荐指数
1
解决办法
1712
查看次数

标签 统计

ajax ×2

asp.net ×2

azure ×1

base64 ×1

c# ×1

javascript ×1

jquery ×1

json ×1

postback ×1

wcf ×1

wsdl ×1