调用华为信息机短信接口

前几天公司更换了发短信方案,需要从现在的短信猫发送短信转到由安装华为的信息机去发送短信。而我要做的是调用他们的API或直接向数据库插入数据,因为我不想去看他们的待发短信表(字段太多了,也不知道哪些需要,哪些不需要),于是就选用他们的API。

 

 

关于asp.net 使用dll 接口中出现 1011的错误

由于DLL加载后,他的运行路径不再是bin目录或程序主目录,而是附加于支持WEB程序运行的进程中。

 

1.服务器安装好华为的信息机(这个是由我们公司运维人员安装,具体不大清楚)

 

2.asp.net开发将SMEntry.dll、SMEntry.ini、sqlConf.xml三个文件放于C:\Windows\system32\inetsr。如果是VS.Net,需要放

 

我是在asp.net环境下使用,选择了dll的API。可是第一步就犯难了,平常引用dll直接在项目添加引用就可以了,这是这个SMEntry.dll不行,引用失败,问我们老大,说是可能不是我们.net开发的dll,而是用C语言之类导出的dll。于是参考网上引用的方法,先把dll放在Bin目录下,然后在代码中使用DllImport导入函数,发现方法的确可行,但是每次初始化时返回值既然是-1011(0才是正确的返回值),说明文档上并没有这个返回码的解释,我就纳闷了。在网上找了很久也没找到。

第二天找这个MAS(EIE)短信平台的技术支持,跟他说明了情况,给我了个文档,主要是在.net环境需要把SMEntry.dll这个文件放到C:\WINDOWS\system32\inetsrv。最后解决了这个问题,现在把调用的步骤写出来,希望能帮助有需要的人。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

3.SMEntry.dll放到网站Bin目录下

4.代码调用接口

 

代码
using System.Runtime.InteropServices;

[DllImport(
"SMEntry.dll")]
public static extern int SubmitShortMessage(string AtTime, string SourceAddr, string DestAddr, string Content, int ContentLen, int NeedStateReport, string ServiceID, string FeeType, string FeeCode);

[DllImport(
"SMEntry.dll")]
public static extern int SP_Startup(string DBName, string Account, string Password);

[DllImport(
"SMEntry.dll")]
public static extern int SP_Login(string Operator, string Password);

[DllImport(
"SMEntry.dll")]
public static extern void SP_Cleanup();

string mbno = !string.IsNullOrEmpty(Request.Params["mbno"]) ? Request.Params["mbno"] : ""; //短信接受者号码
string msg = !string.IsNullOrEmpty(Request.Params["msg"]) ? Request.Params["msg"] : "";

if (!string.IsNullOrEmpty(mbno) && !string.IsNullOrEmpty(msg))
{
int iReturnStart = SP_Startup("127.0.0.1,1433", "CustomSMS", "SqlMsde@InfoxEie2000");
if (iReturnStart != 0)
{
FileMethod.ApendText(
string.Format("{0} 信息机初始化失败,失败代码: {1}\r\n", DateTime.Now, iReturnStart));
strPageReturn
= "fail";
}
else
{
int intReturnLogin = SP_Login("0000", "0");
if (intReturnLogin != 0)
{
FileMethod.ApendText(
string.Format("{0} 信息机登陆失败,失败代码: {1}\r\n", DateTime.Now, intReturnLogin));
strPageReturn
= "fail";
}
else
{
int iReturnSend = SubmitShortMessage("", "106573018467", mbno, msg, Encoding.Default.GetBytes(msg).Length, 1, "EIE", "01", "1");
if (iReturnSend != 0)
{
FileMethod.ApendText(
string.Format("{0} MAS发送短信失败,失败代码: {1}\r\n", DateTime.Now, iReturnSend));
strPageReturn
= "fail";
}
else
FileMethod.ApendText(
string.Format("{0} MAS发送短信成功,msg: {1}\r\n", DateTime.Now, msg));

SP_Cleanup();
}
}
    }

 

posted @ 2011-01-29 00:27  Sky Cheng  阅读(2834)  评论(2)    收藏  举报