编辑:摘要:似乎我的网络应用程序可以被任何人(只有Firefox或Chrome)和我使用我的主计算机访问.如果我尝试从我的任何其他LAN 访问http://luiscarlosch.com/WebFormClean.aspx它会收到405错误
我可以从localhost完美地调用WCF Web方法.我发布到这个服务器:http://luiscarlosch.com/WebFormClean.aspx(只有firefox或chrome)与Visual Studio发布工具,它工作正常.问题是当尝试从另一台计算机访问它时.我得到405:方法不允许.但它确实有意义,因为当我从发布者计算机远程访问它时它工作正常,正如我所说.任何的想法?
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ContactProxy
{
[WebGet()]
[OperationContract]
public Contact getByID(int IDContact)
{
Contact contact = new Contact(IDContact);
return contact;
}
[OperationContract]
public EntityData insertEntityData(int IDEntityDataFieldType, int IDContact, String value)
{
//Contact contact = new Contact();
// contact.insertEntityData(IDEntityDataFieldType, IDContact, value);
EntityData entityData = new EntityData();
entityData.save(IDEntityDataFieldType, IDContact, value);
return entityData;
}
}
Run Code Online (Sandbox Code Playgroud)
这两种方法似乎都不起作用.
我刚刚注意到一些用户能够访问http://luiscarlosch.com/WebFormClean.aspx,因为他们更改了值.所以.一些客户可以阅读方法,但有些不能.这应该发生了.
Web配置
<?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="ApplicationServices" …Run Code Online (Sandbox Code Playgroud) 我在System.Web.UI.Page中使用一些WebMethod来处理一些ajax请求,我试图在会话中存储一个对象,以便在几个ajax请求之后保留信息,甚至在离开页面并返回之后.
我正在访问会话HttpContext.Current.Session("foo"),如果它没什么,我通过它设置它HttpContext.Current.Session("foo") = New Bar().
我遇到的问题是,在设置之后,下次我按下该方法时它已被重置.我尝试更改在其他地方设置的其他会话变量,它们也会被还原.这告诉我,我正在获取会话状态的副本,而不是我可以更新并导致从请求到请求持久化的引用.我仔细检查EnableSession了WebMethod 的属性是否为True,但仍未保留更改为会话状态.
方法声明:
<System.Web.Services.WebMethod(EnableSession:=True)>
Public Shared Function foo(ByVal woNum As String, ByVal workCenter as String) As ToolingModel
Return ToolingModel.getSessionTooling(woNum, workCenter)
End Function
Run Code Online (Sandbox Code Playgroud)
getSessionTooling:
Public Shared Function getSessionTooling(woNum As String, workCenter As String) As ToolingModel
Dim tooling As ToolingModel = HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY)
If tooling Is Nothing Then
tooling = New ToolingModel(woNum, workCenter)
HttpContext.Current.Session(TOOLING_MODEL_SESSION_KEY) = tooling
ElseIf tooling.woNum <> woNum OrElse tooling.workCenter <> workCenter Then
tooling.woNum = woNum
tooling.workCenter = workCenter
tooling.assets.Clear() …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,可以从webserive调用web方法,给出方法的名称和web服务的URL.我在博客上发现了一些代码,除了一个细节之外,这样做很好.它还要求提供请求XML.这里的目标是从Web服务本身获取请求XML模板.我确信这是可能的,因为如果我在浏览器中访问webservice的URL,我可以看到请求和响应XML模板.
这是以编程方式调用webmethod的代码:
XmlDocument doc = new XmlDocument();
//this is the problem. I need to get this automatically
doc.Load("../../request.xml");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
Stream stm = req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponse resp = req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
Console.WriteLine(r.ReadToEnd());
Run Code Online (Sandbox Code Playgroud) 我有两个web方法,我希望重载:
<WebMethod()> _
Public Function GetProject(ByVal id As Int32) As Project
<WebMethod(MessageName:="GetProjects")> _
Public Function GetProject(ByVal filter As String) As Projects
Run Code Online (Sandbox Code Playgroud)
我读到了使用MessageName重载,但是我无法让它工作.这可能吗?
我通过jquery.ajax将包含字符串的javascript变量传递给服务器.虽然调用了"成功"条件,但从不调用服务器端WebMethod.客户:
$.ajax({
type: "post",
url: "Playground.aspx/childBind",
data: {sendData: ID},
//contentType: "application/json; charset=utf-8",
dataType: "text",
success: function (result) { alert("successful!" + result.d); }
})
Run Code Online (Sandbox Code Playgroud)
服务器:
[WebMethod]
public static string childBind(string sendData)
{
return String.Format("Hello");
}
Run Code Online (Sandbox Code Playgroud) 这是一些javascript:
$.ajax({
type: "POST",
url: "default.aspx/GetDate",
contentType: "application/json; charset=utf-8",
data: {},
dataType: "json",
success: function(result) {
alert(result.d);
}
});
Run Code Online (Sandbox Code Playgroud)
上面的方法可以正常工作,并在default.aspx中警告从[WebMethod]返回的名为GetDate的字符串
但是当我使用时:
$.post(
"default.aspx/GetDate",
{},
function(result) {
alert(result.d);
},
"json"
);
Run Code Online (Sandbox Code Playgroud)
此成功方法中的警报永远不会触发.
在firebug中我可以看到POST基本上有效 - 它返回200 OK
但是在这种情况下的响应是整个default.aspx页面的HTML而不是我使用$ .ajax()方法时返回的JSON.
编辑:
firebug中显示的响应和请求标头不相同.
使用$ .ajax()......
REQUEST:
Accept application/json, text/javascript, */*; q=0.01
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection keep-alive
Content-Type application/json; charset=utf-8
Cookie (removed)
Host (removed)
Referer (removed)
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
X-Requested-With XMLHttpRequest
RESPONSE:
Cache-Control private, max-age=0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用.aspx页面中的方法为AJAX请求提供服务.出于某种原因,我没有得到我想要的数据.谁能告诉我我做错了什么?
mypage.aspx:
<%@ Page Language="VB" Title="My Page" %>
<%@ Import Namespace="System.Web.Services" %>
<%@ Import Namespace="System.Collections.Generic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
End Sub
<WebMethod()> Public Function testmethod() As Integer
Return 5
End Function
</script>
<html>
<!--...rest of page including mybutton and myresults-->
Run Code Online (Sandbox Code Playgroud)
JQuery的:
$("#mybutton").click(function() {
$.ajax({
type: "POST",
url: "mypage.aspx/testmethod",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert("success");
$("#myresults").html(msg.d);
},
error: function(msg) {
alert("error:" …Run Code Online (Sandbox Code Playgroud) 无法将FormData的jQuery AJAX帖子处理到ASP.net 4 Web服务WebMethod.
<input id="ipt_file" type="file" />
<a href='#' onclick="UploadFile();" data-role='button'>Upload</a>
Run Code Online (Sandbox Code Playgroud)
var UploadFile = function () {
var file_object = $('#ipt_file')[0].files[0];
var form_data = new FormData();
form_data.append('job_id', '123456');
form_data.append('job_name', 'xyx');
form_data.append('job_file', file_object);
var xhr_upload = $.ajax({
type: "POST",
headers: { "Cache-Control":"no-cache", "Content-Type":"multipart/form-data" }, // also tried without these
url: "../MyServices.asmx/Upload",
data: form_data,
processData: false,
contentType: false,
dataType: "json",
success: function (msg) {
if (typeof (msg) === "object") {
var _upload = $.parseJSON(msg.d);
alert(_upload.status + ': ' + _upload.msg);
}; …Run Code Online (Sandbox Code Playgroud) 我有一个带有文件输入和一个按钮的表单,当我按下按钮时,文件应该转到服务器端。
当我向服务器发送文件时,ajax 响应成功,永远不要停在我使用的 c# webmethod 断点处。我做错了什么?
表单:(Default.aspx)
<form id="form1" runat="server" enctype="multipart/form-data">
<div align="center" class="divBody">
<div id="controlHost">
<div id="outerPanel">
<table width="100%" cellpadding="2" cellspacing="5">
<tr align="left">
<td colspan="2">
<span class="message">Seleccione el archivo que desea subir</span>
</td>
</tr>
<tr align="left">
<td valign="top">
<input type="file" id="FileInput" multiple="false" class="fileInput" />
</td>
<td align="right">
<input type="button" id="btnUpload" name="btnUpload" value="Upload" onclick="sendFile();" class="button" />
</td>
</tr>
</table>
</div>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
脚本:(默认.aspx)
function sendFile() {
var data = new FormData();
var file = $("#FileInput")[0].files[0];
data.append("name", file.name);
data.append("size", file.size); …Run Code Online (Sandbox Code Playgroud) 我有大量的[WebMethod]整个应用程序,我希望我所有的[WebMethod]都是异步的。我[WebMethod]用 async 和 await 关键字装饰了我所有的签名,然后运行我的应用程序。它没有按预期进行。假设我有以下代码
背后的代码
[WebMethod]
public static async Task<List<XXX>> GetXXX()
{
return await new BusinessLogic().GetXXX().ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
业务层
internal async Task<List<XXX>> GetXXX()
{
var obj = await objDAL.GetXXX().ConfigureAwait(false);
List<XXX> listDO = new List<XXX>();
foreach (var item in obj)
{
listDO.Add(new Countries
{
XXXName = item.name,
XXXID = item.id
});
}
return listDO;
Run Code Online (Sandbox Code Playgroud)
objDAL.GetXXX
internal async Task<List<tblXXX>> GetXXX()
{
using (ABCEntities ctx = new ABCEntities())
{
return await ctx.tblXXX.ToListAsync().ConfigureAwait(false);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经将调试器放在上面代码到达的整个路径中return await …
webmethod ×10
jquery ×5
asp.net ×4
c# ×4
.net ×2
ajax ×2
asmx ×2
vb.net ×2
web-services ×2
asp.net-3.5 ×1
asp.net-ajax ×1
asynchronous ×1
file ×1
form-data ×1
overloading ×1
wcf ×1
webforms ×1