WEB开发网
开发学院软件开发VC 从 Managed Extensions for C++ 中使用 .NET My S... 阅读

从 Managed Extensions for C++ 中使用 .NET My Services

 2007-03-30 21:32:26 来源:WEB开发网   
核心提示: 再次用右键单击 results.discomap 文件,在快捷菜单中,从 Managed Extensions for C++ 中使用 .NET My Services(4),单击 Properties(属性),然后将 Tool(工具)选项的值更改为 Custom Build Tool(自

再次用右键单击 results.discomap 文件。在快捷菜单中,单击 Properties(属性),然后将 Tool(工具)选项的值更改为 Custom Build Tool(自定义生成工具)。

从 .NET My Services SDK 解决方案文件夹中将 HsSoapExtension.dll 复制到项目的源文件夹中。

在 csc.rsp 文件(位于 %SystemRoot%Microsoft.NETFrameworkv1.0.xxxx)中,添加以下文本:/reference:HsSoapExtension.dll

在 Build(生成)菜单上,单击 Build Solution(生成解决方案)。

这将生成用于 XML Web Service 的 C# 代理类 results.cs,并且该类将被置于 results.dll 中。

注意:对于 Managed Extensions 应用程序,所有代理类都在 C# 中生成,不管它们的目标是 .NET My Services 还是其他 Web Service。

要使用 .NET FavoriteWebSites 服务,请在 MyServicesClient.cpp 文件中添加以下代码行:#using <HsSoapExtension.dll>
#using <references.dll>

现在,您已经完成调用 MyService 所需的所有设置工作。下面的示例客户端代码显示了如何将 Web 站点添加到您的 .NET FavoriteWebSites 中,以及如何查询和删除 Web 站点。

示例客户端代码

int _tmain(void)
{
  
Microsoft::Hs::ServiceLocator::ServiceLocator* serviceLocator =
 new Microsoft::Hs::ServiceLocator::ServiceLocator
 ("http://localhost/myServices", "c:\logfile.txt", true);
  try
   {
    //
    // 使用服务定位器查找并初始化 .NET
    // FavoriteWebSites 服务/代理
    //
    // 需要:如果您要查询其他用户,请指定
    // 用户名而不是调用 User.GetCurrentUser()。
    // 注意:在 ASP.NET 应用中,User.GetCurrentUser
    // 将不起作用。
    //
    
   myFavoriteWebSites* myFav = dynamic_cast<myFavoriteWebSites*>
     (serviceLocator->GetService(System::Type::
      GetType("myFavoriteWebSites"),
      User::GetCurrentUser()));
   
    //
    // 创建新的收藏 Web 站点
    //
    favoriteWebSiteType* newWebsite = new favoriteWebSiteType();
    localizableString* title = new localizableString();
    title->lang = S"en";
    title->Value = S"Hello.NET";
    newWebsite->title = new localizableString*[1];
   newWebsite->title[0] =title;
    newWebsite->url = S"http://www.microsoft.com";
    catType* cat = new catType();
    cat->ref = S"system";
    newWebsite->cat = new catType*[1];
   newWebsite->cat[0] = cat;
    //
    // 创建 insertRequest 并调用 insert。
    //
    insertRequestType* insertRequest = new insertRequestType();
    // 插入到服务的根中。
    insertRequest->select=S"/";    
    insertRequest->Items = new Object*[1];
   insertRequest->Items[0] = newWebsite;
    insertResponseType* response = myFav->insert(insertRequest);
    //
    // 检查以确保操作成功。
    //
   if(response->selectedNodeCount != 1 || response->status !=
   responseStatus::success)
    {
      throw new Exception(S"将新的 favoriteWebSite 插入到 myFavoriteWebSites 中时出错。");
    }
    //
    // 在插入之后查询新的收藏 Web 站点。
    //
    queryRequestType* queryRequest = new queryRequestType();
    xpQueryType* xpQuery = new xpQueryType();
    // 注意:“m:”前缀将在当前服务的
    // SoapExtension 中自动被声明。
    xpQuery->
     select=S"/m:myFavoriteWebSites/m:favoriteWebSite
     [./m:title='Hello.NET' and ./m:url='http://www.microsoft.com']";
    // 将 xpQuery 添加到 xpQuery 数组中。
    queryRequest->xpQuery = new xpQueryType*[1];
   queryRequest->xpQuery[0] = xpQuery;
    queryResponseType* queryResponse = myFav->query(queryRequest);
    //
    // 从响应中获取返回的 favoriteWebSite。
    //
    favoriteWebSiteType* returnedWebSite =
     dynamic_cast<favoriteWebSiteType*>
     (queryResponse->xpQueryResponse[0]->Items[0]);
    
    //
    // 检查以确保操作成功。
    //      
   if(String::Compare (returnedWebSite->title[0]->Value,
   S"Hello.NET") != 0 ||
     String::Compare (queryResponse->xpQueryResponse[0]->status ,
     S"success")!= 0)
    {
      throw new Exception(S"从 myFavoriteWebSites 中检索新的 favoriteWebSite 时出错");
    }
    //
    // 在消息框中显示 Web 站点。
    //
   MessageBox::Show(String::Concat
     (S"下面的 favoriteWebSite 是从 myFavoriteWebSites 返回的:", returnedWebSite->title[0]->Value));
    
    //
    // 替换 cat/@ref 属性值
    //
    topLevelAttributeType* redAttribute = new topLevelAttributeType();
    redAttribute->name = S"ref";
    redAttribute->value = S"newvalue";
    replaceRequestType* replaceRequest = new replaceRequestType();
    replaceRequest->select=S"/m:myFavoriteWebSites/m:favoriteWebSite
     /m:cat/@ref[.='system']";
    replaceRequest->attribute = new topLevelAttributeType*[1];
   replaceRequest->attribute[0] = redAttribute;
    
    //
    // 删除 Web 站点
    //
    deleteRequestType* deleteRequest = new deleteRequestType();
    deleteRequest->
     select = S"/m:myFavoriteWebSites/m:favoriteWebSite
      [./m:title='Hello.NET' and ./m:url='http://www.microsoft.com']";
   deleteResponseType* delResponse = myFav->
       __identifier(delete)(deleteRequest);
   
    //
    // 检查以确保至少在一个元素上执行了操作
    // 并且响应显示操作成功
    //
   if(delResponse->selectedNodeCount == 0 || delResponse->status !=
       responseStatus::success)
    {
      throw new Exception(S"从 myFavoriteWebSites 中删除新的 favoriteWebSite 时出错");
    }
   MessageBox::Show(S"已成功地从 myFavoriteWebSites 中删除 favoriteWebSite");
    
    
  }
  catch(SoapException* se)
  {
    //
    // 将 SoapException 写入控制台。
    //
   Console::Write(S"出现 SoapException
异常:
");
   Console::WriteLine(se->ToString());
   Console::Write(S
从 .NET My Services 返回扩展的 SoapFault 信息:
");
   Console::Write(se->Detail->InnerXml);
  }
  catch(Exception* ex)
  {
    //
    // 将异常写入控制台。
    //
   Console::WriteLine(ex->ToString());
  }
  Console::WriteLine(S"按 Enter 键退出。" );
  Console::ReadLine();
  
  return 0;
}

上一页  1 2 3 4 

Tags:Managed Extensions for

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接